对象存储服务 OBS-分段上传:列举已上传的段

时间:2025-02-12 14:57:57

列举已上传的段

您可使用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.htmlstring 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.htmlstring 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);}
support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_0408.html