对象存储服务 OBS-分段上传:列举已上传的段
列举已上传的段
您可使用ObsClient.ListParts列举出某一分段上传任务所有已经上传成功的段。
该接口可设置的参数如下:
参数 |
作用 |
OBS .NET SDK对应属性 |
---|---|---|
BucketName |
分段上传任务所属的桶名。 |
ListPartsRequest.BucketName |
ObjectKey |
分段上传任务所属的对象名。 |
ListPartsRequest.ObjectKey |
UploadId |
分段上传任务全局唯一标识,从InitiateMultipartUpload返回的结果获取。 |
ListPartsRequest.UploadId |
MaxParts |
表示列举已上传的段返回结果最大段数目,即分页时每一页中段数目。 |
ListPartsRequest.MaxParts |
PartNumberMarker |
表示待列出段的起始位置,只有Part Number大于该参数的段会被列出。 |
ListPartsRequest.PartNumberMarker |
- 简单列举
// 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 简单列举 try { ListPartsRequest request = new ListPartsRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.UploadId = "uploadId"; ListPartsResponse response = client.ListParts(request); Console.WriteLine("List parts response: {0}", response.StatusCode); foreach (PartDetail part in response.Parts) { Console.WriteLine("PartNumber: " + part.PartNumber); Console.WriteLine("Size: " + part.Size); Console.WriteLine("ETag: " + part.ETag); Console.WriteLine("LastModified: " + part.LastModified); } } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }
列举段至多返回1000个段信息,如果指定的Upload ID包含的段数量大于1000,则返回结果中ListPartsResult.isTruncated为true表明本次没有返回全部段,并可通过ListPartsRespon.NextPartNumberMarker获取下次列举的起始位置。
- 列举所有段
由于ObsClient.ListParts只能列举至多1000个段,如果段数量大于1000,列举所有分段请参考如下示例:
// 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 列举所有段 try { ListPartsRequest request = new ListPartsRequest(); request.BucketName = "bucketname"; request.ObjectKey = "objectname"; request.UploadId = "uploadId"; ListPartsResponse response; do { response = client.ListParts(request); Console.WriteLine("List parts response: {0}", response.StatusCode); foreach (PartDetail part in response.Parts) { Console.WriteLine("PartNumber: " + part.PartNumber); Console.WriteLine("Size: " + part.Size); Console.WriteLine("ETag: " + part.ETag); Console.WriteLine("LastModified: " + part.LastModified); } request.PartNumberMarker = response.NextPartNumberMarker; } while (response.IsTruncated); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); }