完成分片上传
完成分片上传代码如下:
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- public void CompleteMultipartUpload(string bucketName, string key, string uploadId)
- {
- try
- {
- var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, key, uploadId);
- foreach (var partETag in partETags)
- {
- completeMultipartUploadRequest.PartETags.Add(partETag);
- }
- var result = client.CompleteMultipartUpload(completeMultipartUploadRequest);
- Console.WriteLine("Complete multipart upload succeeded");
- }
- catch (Exception ex)
- {
- Console.WriteLine("Complete multipart upload failed. {0}", ex.Message);
- }
- }
说明:
- 完整代码参考GitHub。
- 上面代码中的 partETags 就是进行分片上传中保存的partETag的列表,OSS收到用户提交的Part列表后,会逐一验证每个数据Part的有效性。
- 当所有的数据Part验证通过后,OSS会将这些part组合成一个完整的文件。
通过断点续传拷贝
除了支持分片拷贝外,还提供了断点续传功能,如果某次拷贝中断,下次可以从上次失败的位置开始拷贝,以便加快速度。
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- public static void ResumableCopyObject(string sourceBucketName, string sourceKey,
- string destBucketName, string destKey)
- {
- string checkpointDir = @"<your checkpoint dir>";
- try
- {
- var request = new CopyObjectRequest(sourceBucketName, sourceKey, destBucketName, destKey);
- client.ResumableCopyObject(request, checkpointDir);
- Console.WriteLine("Resumable copy new object:{0} succeeded", request.DestinationKey);
- }
- catch (Exception ex)
- {
- Console.WriteLine("Resumable copy new object failed, {0}", ex.Message);
- }
- }
说明:
- 完整代码参考GitHub。
- checkpointDir目录中会保存断点续传的中间状态,用于失败后,下次继续拷贝时使用。
- 如果checkpointDir为null,断点续传功能不会生效,每次都会重新拷贝。
修改文件Meta
可以通过ModifyObjectMeta操作来实现修改已有文件的 meta 信息
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- /// <summary>
- /// 修改文件的meta值
- /// </summary>
- /// <param name="bucketName">文件所在存储空间的名称</param>
- /// <param name="key">文件的名称</param>
- public void ModifyObjectMeta(string bucketName, string key)
- {
- try
- {
- var meta = new ObjectMetadata();
- meta.ContentType = "application/octet-stream";
- client.ModifyObjectMeta(bucketName, key, meta);
- Console.WriteLine("Modify object meta succeeded");
- }
- catch (Exception ex)
- {
- Console.WriteLine("Modify object meta failed. {0}", ex.Message);
- }
- }
说明: 完整代码参考
GitHub。