code: private Response completeMultipartUpload(final String bucket, final String object,
        final long uploadId) {
      return S3RestUtils.call(bucket, new S3RestUtils.RestCallable<CompleteMultipartUploadResult>() {
        @Override
        public CompleteMultipartUploadResult call() throws S3Exception {
          String bucketPath = parseBucketPath(AlluxioURI.SEPARATOR + bucket);
          checkBucketIsAlluxioDirectory(bucketPath);
          String objectPath = bucketPath + AlluxioURI.SEPARATOR + object;
          AlluxioURI multipartTemporaryDir =
              new AlluxioURI(S3RestUtils.getMultipartTemporaryDirForObject(bucketPath, object));
          checkUploadId(multipartTemporaryDir, uploadId);
  
          try {
            List<URIStatus> parts = mFileSystem.listStatus(multipartTemporaryDir);
            Collections.sort(parts, new URIStatusNameComparator());
  
            CreateFilePOptions options = CreateFilePOptions.newBuilder().setRecursive(true)
                .setWriteType(getS3WriteType()).build();
            FileOutStream os = mFileSystem.createFile(new AlluxioURI(objectPath), options);
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            DigestOutputStream digestOutputStream = new DigestOutputStream(os, md5);
  
            try {
              for (URIStatus part : parts) {
                try (FileInStream is = mFileSystem.openFile(new AlluxioURI(part.getPath()))) {
                  ByteStreams.copy(is, digestOutputStream);
                }
              }
            } finally {
              digestOutputStream.close();
            }
  
            mFileSystem.delete(multipartTemporaryDir,
                DeletePOptions.newBuilder().setRecursive(true).build());
  
            String entityTag = Hex.encodeHexString(md5.digest());
            return new CompleteMultipartUploadResult(objectPath, bucket, object, entityTag);
          } catch (Exception e) {
            throw toObjectS3Exception(e, objectPath);
          }
        }
      });
    }
docs: under the temporary multipart upload directory are combined into the final object.