开发者社区> 问答> 正文

.NET-SDK之如何实现管理文件(六)?


完成分片上传


完成分片上传代码如下:

  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. public void CompleteMultipartUpload(string bucketName, string key, string uploadId)
  5. {
  6.     try
  7.     {
  8.         var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, key, uploadId);
  9.         foreach (var partETag in partETags)
  10.         {
  11.             completeMultipartUploadRequest.PartETags.Add(partETag);
  12.         }
  13.         var result = client.CompleteMultipartUpload(completeMultipartUploadRequest);
  14.         Console.WriteLine("Complete multipart upload succeeded");
  15.     }
  16.     catch (Exception ex)
  17.     {
  18.         Console.WriteLine("Complete multipart upload failed. {0}", ex.Message);
  19.     }
  20. }

说明:
  • 完整代码参考GitHub
  • 上面代码中的 partETags 就是进行分片上传中保存的partETag的列表,OSS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。
  • 当所有的数据Part验证通过后,OSS会将这些part组合成一个完整的文件。


通过断点续传拷贝


除了支持分片拷贝外,还提供了断点续传功能,如果某次拷贝中断,下次可以从上次失败的位置开始拷贝,以便加快速度。
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. public static void ResumableCopyObject(string sourceBucketName, string sourceKey,
  5.                                        string destBucketName, string destKey)
  6. {
  7.     string checkpointDir = @"<your checkpoint dir>";
  8.     try
  9.     {
  10.         var request = new CopyObjectRequest(sourceBucketName, sourceKey, destBucketName, destKey);
  11.         client.ResumableCopyObject(request, checkpointDir);
  12.         Console.WriteLine("Resumable copy new object:{0} succeeded", request.DestinationKey);
  13.     }
  14.     catch (Exception ex)
  15.     {
  16.         Console.WriteLine("Resumable copy new object failed, {0}", ex.Message);
  17.     }
  18. }

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


修改文件Meta


可以通过ModifyObjectMeta操作来实现修改已有文件的 meta 信息
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. /// <summary>
  5. /// 修改文件的meta值
  6. /// </summary>
  7. /// <param name="bucketName">文件所在存储空间的名称</param>
  8. /// <param name="key">文件的名称</param>
  9. public void ModifyObjectMeta(string bucketName, string key)
  10. {
  11.     try
  12.     {
  13.         var meta = new ObjectMetadata();
  14.         meta.ContentType = "application/octet-stream";
  15.         client.ModifyObjectMeta(bucketName, key, meta);
  16.         Console.WriteLine("Modify object meta succeeded");
  17.     }
  18.     catch (Exception ex)
  19.     {
  20.         Console.WriteLine("Modify object meta failed. {0}", ex.Message);
  21.     }
  22. }

说明: 完整代码参考 GitHub

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

相关电子书

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