开发者社区> 问答> 正文

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


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


我们可以用 ListMultipartUploads 方法获取存储空间内所有上传事件。

  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. try
  5. {
  6.     // 获取Bucket内所有上传事件
  7.     var request = new ListMultipartUploadsRequest(bucketName);
  8.     var multipartUploadListing = client.ListMultipartUploads(request);
  9.     Console.WriteLine("List multi part succeeded");
  10.     // 获取各事件信息
  11.     var multipartUploads = multipartUploadListing.MultipartUploads;
  12.     foreach (var mu : multipartUploads)
  13.     {
  14.         Console.WriteLine("Key:{0}, UploadId:{1}", mu.Key , mu.UploadId);
  15.     }
  16.     var commonPrefixes = multipartUploadListing.CommonPrefixes;
  17.     foreach (var prefix : commonPrefixes)
  18.     {
  19.         Console.WriteLine("Prefix:{0}", prefix);
  20.     }
  21. }
  22. catch (Exception ex)
  23. {
  24.     Console.WriteLine("List multi part uploads failed, {0}", ex.Message);
  25. }

说明:
  • 完整代码请参考GitHub
  • 默认情况下,如果存储空间中的分片上传事件的数量大于1000,则只会返回1000个文件, 且返回结果中 IsTruncated 为 false,返回 NextKeyMarker 和 NextUploadIdMarker 作为下此读取的起点。
  • 若想增大返回分片上传事件数目,可以修改 MaxUploads 参数,或者使用 KeyMarker 以及 UploadIdMarker 参数分次读取。


获取所有已上传的片信息


我们可以用 ListParts 方法获取某个上传事件所有已上传的片。
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. try
  5. {
  6.     var listPartsRequest = new ListPartsRequest(bucketName, key, uploadId);
  7.     var listPartsResult = client.ListParts(listPartsRequest);
  8.     Console.WriteLine("List parts succeeded");
  9.     // 遍历所有Part
  10.     var parts = listPartsResult.Parts;
  11.     foreach (var part : parts)
  12.     {
  13.         Console.WriteLine("partNumber:{0}, ETag:{1}, Size:{2}", part.PartNumber, part.ETag, part.Size);
  14.     }
  15. }
  16. catch (Exception ex)
  17. {
  18.     Console.WriteLine("List parts failed, {0}", ex.Message);
  19. }

说明:
  • 完整代码参考GitHub
  • 默认情况下,如果存储空间中的分片上传事件的数量大于1000,则只会返回1000个Multipart Upload信息,且返回结果中 IsTruncated 为false,并返回 NextPartNumberMarker作为下此读取的起点。
  • 若想增大返回分片上传事件数目,可以修改 MaxParts 参数,或者使用 PartNumberMarker 参数分次读取。


通过断点续传上传


除了支持分片上传外,还提供了断点续传功能,如果某次上传中断,下次可以从上次失败的位置开始上传,以便加快速度。
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. /// <summary>
  5. /// 断点续传
  6. /// </summary>
  7. /// <param name="bucketName">指定的存储空间名称。</param>
  8. /// <param name="key">保存到OSS上的名称。</param>
  9. /// <param name="fileToUpload">指定上传文件的路径。</param>
  10. /// <param name="checkpointDir">保存断点续传中间状态文件的目录,如果指定了,则会具有断点续传功能,否则会重新上传</param>
  11. public static void ResumableUploadObject(string bucketName, string key, string fileToUpload, string checkpointDir)
  12. {
  13.     try
  14.     {
  15.         client.ResumableUploadObject(bucketName, key, fileToUpload, null, checkpointDir);
  16.         Console.WriteLine("Resumable upload object:{0} succeeded", key);
  17.     }
  18.     catch (Exception ex)
  19.     {
  20.         Console.WriteLine("Resumable upload object failed, {0}", ex.Message);
  21.     }
  22. }

说明:
  • 完整代码参考GitHub
  • checkpointDir目录中会保存断点续传的中间状态,用于失败后,下次继续上传时使用。
  • 如果checkpointDir为null,断点续传功能不会生效,每次都会重新上传。

展开
收起
青衫无名 2017-10-18 15:01:38 1864 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
从 SDK 到编解码:视频直播架构解析 立即下载
跨平台的云服务SDK需要什么 立即下载
一个跨平台的云服务SDK需要什么 立即下载