获取对象版本

ListVersions操作可以获取关于对象版本信息的元数据,执行该操作需要对bucket有用READ 权限。

示例代码:

using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;

namespace DotNetSDK.ObjectOperation
{
    public class ListVersionsExample
    {
        public static async Task ListVersions()
        {
            var accessKey = "YOUR_ACCESS_KEY";
            var secretKey = "YOUR_SECRET_KEY";
            var endpoint = "YOUR_ENDPOINT";
            var bucketName = "EXAMPLE_BUCKET";
            var key = "EXAMPLE_KEY";
            try
            {
                var credentials = new BasicAWSCredentials(accessKey, secretKey);
                var conf = new AmazonS3Config
                {
                    ServiceURL = endpoint
                };
                var s3Client = new AmazonS3Client(credentials, conf);
                var listVersionsRequest = new ListVersionsRequest()
                {
                    BucketName = bucketName,
                    Prefix = key
                };
                var result = await s3Client.ListVersionsAsync(listVersionsRequest);
                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine("fail to list versions, HttpStatusCode:{0}, ErrorCode:{1}.", (int) result.HttpStatusCode, result.HttpStatusCode);
                    return;
                }

                foreach (var s3ObjectVersion in result.Versions)
                {
                    Console.WriteLine("key: {0}, versionId: {1}.", s3ObjectVersion.Key, s3ObjectVersion.VersionId);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

ListVersionsRequest可以设置的参数如下:

参数 类型 说明 是否必要
BucketName string 查询版本信息的对象所在的bucket的名称。
Delimiter string 与Prefix参数一起用于对对象key进行分组的字符。所有key包含指定的Prefix且第一次出现Delimiter字符之间的对象作为一组。如果没有指定Prefix参数,按Delimiter对所有对象key进行分割,多个对象分割后从对象key开始到第一个Delimiter之间相同的部分形成一组。
Encoding EncodingType 用于设置response中object key的字符编码类型。
KeyMarker string 指定一个标识符,返回的对象的key将是按照字典顺序排序后位于该标识符之后的所有对象。
MaxKeys int 设置response中返回对象key的数量,默认值和最大值均为1000。
Prefix string 限定返回对象的key必须以Prefix作为前缀。

ListVersions返回的结果如下:

属性名 类型 说明
CommonPrefixes List<string> 当请求中设置了Delimiter和Prefix属性时,所有包含指定的Prefix且第一次出现Delimiter字符的对象key作为一组。
Delimiter string 与请求中设置的Delimiter一致。
IsTruncated bool 当为false时表示返回结果中包含了全部符合本次请求查询条件的对象版本信息,否则只返回了MaxKeys个对象版本信息。
KeyMarker string 与请求中设置的KeyMarker一致。
MaxKeys int 本次返回结果中包含的对象版本信息数量的最大值。
Name string 执行本操作的bucket名称。
NextKeyMarker string 当返回结果中的IsTruncated为true时,可以使用NextKeyMarker作为下次查询请求中的KeyMarker,继续查询出下一部分的对象版本信息。
NextVersionIdMarker string 本次查询返回的最后一个对象版本id。
Prefix string 与请求中设置的Prefix一致。
Versions List<S3ObjectVersion> 对象版本信息的数组,数组中每一项包含了对象的Entity Tag、是否为最新版本以及DeleteMarker、对象key、最新修改时间、拥有者、大小、存储类型和版本Id的信息。

响应结果:

HTTP状态码 响应码 描述
200 OK 操作成功。
400 BadRequest 请求中设置bucket的名字不合法。
403 Forbidden 用户没有权限执行操作。
404 NotFound 请求参数中设置的bucket不存在。