分片上传接口 融合接口 功能说明 分片上传步骤较多,包括初始化、文件切片、各个分片上传、完成上传。为了简化分片上传,Java SDK 提供了分片上传的封装接口。您可以调用 TransferManager 接口,快速实现文件的分片上传与分片的管理。文件的上传时,TransferManager 会采用多线程的方式,同时进行多个文件的上传。 代码示例 使用 TransferManager 分片上传 java public void upload() { try { String bucket " "; String key " "; String localPath " "; // TransferManager 只需要初始化一次,可以用于多个上传任务 TransferManager transMgr TransferManagerBuilder.standard() .withS3Client(s3Client) // 设置最小分片大小,默认是5MB。 .withMinimumUploadPartSize(1010241024L) // 设置采用分片上传的阈值为100MB。只有当文件大于该值时,才会采用分片上传,否则采用普通上传。默认值是16MB。 .withMultipartUploadThreshold(10010241024L) .build(); // TransferManager 采用异步方式进行处理,因此该调用会立即返回。 PutObjectRequest request new PutObjectRequest(bucket, key, new File(localPath)); request.withCannedAcl(CannedAccessControlList.Private); // 设置对象ACL,可以设置公共读CannedAccessControlList.PublicRead // request.setStorageClass(StorageClass.Standard); // 设置对象的存储类别 ObjectMetadata meta new ObjectMetadata(); meta.setContentType("application/octetstream"); // 设置ContentType,默认application/octetstream request.setMetadata(meta); // 还可以设置其他自定义元数据 Upload upload transMgr.upload(request); // 等待上传全部完成。 UploadResult result upload.waitForUploadResult(); System.out.println("upload success, etag" + result.getETag()); } catch (InterruptedException e) { e.printStackTrace(); } } 使用 TransferManager 分片复制 java public void copy() { try { String destBucketName " "; String destObjectKey " "; String sourceBucketName " "; String sourceObjectKey " "; // TransferManager 只需要初始化一次,可以用于多个上传任务 TransferManager transMgr TransferManagerBuilder.standard() .withS3Client(s3Client) .withMinimumUploadPartSize(1010241024L) .withMultipartUploadThreshold(10010241024L) .build(); // TransferManager 采用异步方式进行处理,因此该调用会立即返回。 CopyObjectRequest request new CopyObjectRequest(sourceBucketName, sourceObjectKey, destBucketName, destObjectKey); Copy copy transMgr.copy(request); CopyResult result copy.waitForCopyResult(); System.out.println("copy success, etag" + result.getETag()); } catch (InterruptedException e) { e.printStackTrace(); } } 取消分片上传 您可以使用 TransferManager.abortMultipartUploads 来取消分片上传。 java public void abortMultipartUploads() { String bucket " "; int sevenDays 1000 60 60 24 7; Date oneWeekAgo new Date(System.currentTimeMillis() sevenDays); TransferManager transMgr TransferManagerBuilder.standard() .withS3Client(s3Client) .build(); //取消在一个星期前初始化并还未完成的分片上传 transMgr.abortMultipartUploads(bucket, oneWeekAgo); } 关于ContentType的说明 ContentType用于标识文件的资源类型,比如image/png, image/jpg 是图片类型,video/mpeg, video/mp4是视频类型,text/plain, text/html是文本类型, 浏览器针对不同的ContentType会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。application/octetstream类型会直接打开下载窗口。 在java sdk中,如果用户没有设置ContentType,会根据PutObjectRequest中file参数的后缀扩展名自动生成ContentType。