获取存储空间内所有分片上传事件
我们可以用 ListMultipartUploads 方法获取存储空间内所有上传事件。
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- try
- {
- // 获取Bucket内所有上传事件
- var request = new ListMultipartUploadsRequest(bucketName);
- var multipartUploadListing = client.ListMultipartUploads(request);
- Console.WriteLine("List multi part succeeded");
- // 获取各事件信息
- var multipartUploads = multipartUploadListing.MultipartUploads;
- foreach (var mu : multipartUploads)
- {
- Console.WriteLine("Key:{0}, UploadId:{1}", mu.Key , mu.UploadId);
- }
- var commonPrefixes = multipartUploadListing.CommonPrefixes;
- foreach (var prefix : commonPrefixes)
- {
- Console.WriteLine("Prefix:{0}", prefix);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("List multi part uploads failed, {0}", ex.Message);
- }
说明:
- 完整代码请参考GitHub。
- 默认情况下,如果存储空间中的分片上传事件的数量大于1000,则只会返回1000个文件, 且返回结果中 IsTruncated 为 false,返回 NextKeyMarker 和 NextUploadIdMarker 作为下此读取的起点。
- 若想增大返回分片上传事件数目,可以修改 MaxUploads 参数,或者使用 KeyMarker 以及 UploadIdMarker 参数分次读取。
获取所有已上传的片信息
我们可以用 ListParts 方法获取某个上传事件所有已上传的片。
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- try
- {
- var listPartsRequest = new ListPartsRequest(bucketName, key, uploadId);
- var listPartsResult = client.ListParts(listPartsRequest);
- Console.WriteLine("List parts succeeded");
- // 遍历所有Part
- var parts = listPartsResult.Parts;
- foreach (var part : parts)
- {
- Console.WriteLine("partNumber:{0}, ETag:{1}, Size:{2}", part.PartNumber, part.ETag, part.Size);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("List parts failed, {0}", ex.Message);
- }
说明:
- 完整代码参考GitHub
- 默认情况下,如果存储空间中的分片上传事件的数量大于1000,则只会返回1000个Multipart Upload信息,且返回结果中 IsTruncated 为false,并返回 NextPartNumberMarker作为下此读取的起点。
- 若想增大返回分片上传事件数目,可以修改 MaxParts 参数,或者使用 PartNumberMarker 参数分次读取。
通过断点续传上传
除了支持分片上传外,还提供了断点续传功能,如果某次上传中断,下次可以从上次失败的位置开始上传,以便加快速度。
- using Aliyun.OSS;
- // 初始化OssClient
- var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
- /// <summary>
- /// 断点续传
- /// </summary>
- /// <param name="bucketName">指定的存储空间名称。</param>
- /// <param name="key">保存到OSS上的名称。</param>
- /// <param name="fileToUpload">指定上传文件的路径。</param>
- /// <param name="checkpointDir">保存断点续传中间状态文件的目录,如果指定了,则会具有断点续传功能,否则会重新上传</param>
- public static void ResumableUploadObject(string bucketName, string key, string fileToUpload, string checkpointDir)
- {
- try
- {
- client.ResumableUploadObject(bucketName, key, fileToUpload, null, checkpointDir);
- Console.WriteLine("Resumable upload object:{0} succeeded", key);
- }
- catch (Exception ex)
- {
- Console.WriteLine("Resumable upload object failed, {0}", ex.Message);
- }
- }
说明:
- 完整代码参考GitHub。
- checkpointDir目录中会保存断点续传的中间状态,用于失败后,下次继续上传时使用。
- 如果checkpointDir为null,断点续传功能不会生效,每次都会重新上传。