开发者社区 问答 正文

Java-SDK之如何实现上传文件(五)?


获取已上传的分片


获取上传的分片可以罗列出指定Upload ID所属的所有已经上传成功的分片。可以调用OSSClient.listParts获取某个上传事件所有已上传分片。listParts的可设置的参数如下:

参数作用方法
UploadIdUpload Id,initiateMultipartUpload返回的结果获取。ListPartsRequest.setUploadId(String uploadId)
MaxPartsOSS响应中的最大Part数目,即分页时每一页中Part数目。ListPartsRequest.setMaxParts(int maxParts)
PartNumberMarker指定List的起始位置,只有Part Number数目大于该参数的Part会被列出。ListPartsRequest.setPartNumberMarker(Integer partNumberMarker)


简单列举

  1. // endpoint以杭州为例,其它region请按实际情况填写
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. // 创建OSSClient实例
  7. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  8. // 列举已上传的分片,其中uploadId来自于initiateMultipartUpload        
  9. ListPartsRequest listPartsRequest = new ListPartsRequest("<yourBucketName>", "<yourKey>", "<uploadId>");
  10. PartListing partListing = ossClient.listParts(listPartsRequest);
  11. for (PartSummary part : partListing.getParts()) {
  12.     // 分片号,上传时候指定
  13.     part.getPartNumber();
  14.     // 分片数据大小
  15.     part.getSize();
  16.     // Part的ETag
  17.     part.getETag();
  18.     // Part的最后修改上传
  19.     part.getLastModified();
  20. }
  21. // 关闭client
  22. ossClient.shutdown();

提示:
  • 默认情况下,如果存储空间中的分片上传事件的数量大于1000,则只会返回1000个Multipart Upload信息,且返回结果中 IsTruncated 为false,并返回 NextPartNumberMarker作为下此读取的起点。
  • 如果没有一次性获取所有的上传分片,可以采用分页列举的方式。


获取所有已上传分片


默认情况下,listParts只能列举1000个分片,如果分片数量大于1000,列举所有分片请参考如下示例。
  1. // endpoint以杭州为例,其它region请按实际情况填写
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. // 创建OSSClient实例
  7. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  8. // 列举所有已上传的分片    
  9. PartListing partListing;
  10. ListPartsRequest listPartsRequest = new ListPartsRequest("<yourBucketName>", "<yourKey>", "<uploadId>");
  11. do {
  12.     partListing = ossClient.listParts(listPartsRequest);
  13.     for (PartSummary part : partListing.getParts()) {
  14.         // 分片号,上传时候指定
  15.         part.getPartNumber();
  16.         // 分片数据大小
  17.         part.getSize();
  18.         // Part的ETag
  19.         part.getETag();
  20.         // Part的最后修改上传
  21.         part.getLastModified();
  22.     }
  23.     listPartsRequest.setPartNumberMarker(partListing.getNextPartNumberMarker());
  24. } while (partListing.isTruncated());
  25. // 关闭client
  26. ossClient.shutdown()


分页获取所有分片


默认情况下,listParts一次列举1000个分片,上面的获取所有已上传分片也是分页的一种特殊情况,每页1000个分片。如果需要指定每页分片的数量,即一次列举的分片数量,请参考以下代码。
  1. // endpoint以杭州为例,其它region请按实际情况填写
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. // 创建OSSClient实例
  7. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  8. // 分页列举已上传的分片    
  9. PartListing partListing;
  10. ListPartsRequest listPartsRequest = new ListPartsRequest("<yourBucketName>", "<yourKey>", "<uploadId>");
  11. // 每页100个分片
  12. listPartsRequest.setMaxParts(100);
  13. do {
  14.     partListing = ossClient.listParts(listPartsRequest);
  15.     for (PartSummary part : partListing.getParts()) {
  16.         // 分片号,上传时候指定
  17.         part.getPartNumber();
  18.         // 分片数据大小
  19.         part.getSize();
  20.         // Part的ETag
  21.         part.getETag();
  22.         // Part的最后修改上传
  23.         part.getLastModified();
  24.     }
  25.     listPartsRequest.setPartNumberMarker(partListing.getNextPartNumberMarker());
  26. } while (partListing.isTruncated());
  27. // 关闭client
  28. ossClient.shutdown();


获取存储空间内所有分片上传事件


列举分片上传事件可以罗列出所有执行中的分片上传事件,即已经初始化的尚未Complete或者Abort的分片上传事件。列举分片上传的可设置的参数如下:
参数作用方法
Prefix限定返回的文件名(object)必须以Prefix作为前缀。注意使用Prefix查询时,返回的文件名(Object)中仍会包含Prefix。ListMultipartUploadsRequest.setPrefix(String prefix)
Delimiter用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素。ListMultipartUploadsRequest.setDelimiter(String delimiter)
MaxUploads限定此次返回分片上传事件的最大数目,默认为1000,MaxUploads取值不能大于1000。ListMultipartUploadsRequest.setMaxUploads(Integer maxUploads)
KeyMarker所有Object名字的字典序大于KeyMarker参数值的Multipart事件。可以与UploadIdMarker参数一同使用来指定返回结果的起始位置。ListMultipartUploadsRequest.setKeyMarker(String keyMarker)
UploadIdMarker与KeyMarker参数一同使用来指定返回结果的起始位置。 如果KeyMarker参数未设置,则OSS忽略UploadIdMarker参数。 如果KeyMarker参数被设置,查询结果中包含:所有Object名字的字典序大于KeyMarker参数值和Object名字等于KeyMarker参数值且Upload ID比UploadIdMarker参数值大的分片上传事件。ListMultipartUploadsRequest.setUploadIdMarker(String uploadIdMarker)

调用OSSClient.listMultipartUploads获取存储空间内分片上传事件。





展开
收起
青衫无名 2017-10-18 10:47:03 1955 分享 版权
0 条回答
写回答
取消 提交回答