获取对象版本信息

  • ListObjectVersions

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

代码示例:

// 列出对象的版本信息
func ListObjectVersion(svc *s3.S3) {
    listObjectVersionsInput := &s3.ListObjectVersionsInput{
        Bucket: aws.String("exampleBucket"),
        Prefix: aws.String("exampleKey"),
    }

    listObjectVersionsOutput, err := svc.ListObjectVersions(listObjectVersionsInput)
    if err != nil {
        fmt.Printf("fail to list object versions. %v\n", err)
        return
    }
    fmt.Println(listObjectVersionsOutput)
}

ListObjectVersionsInput可设置的参数如下:

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

ListObjectVersionsOutput返回的属性如下:

属性名 类型 说明
CommonPrefixes []*CommonPrefix 当请求中设置了Delimiter和Prefix属性时,所有包含指定的Prefix且第一次出现Delimiter字符的对象key作为一组。
DeleteMarkers []*DeleteMarkerEntry 对象删除标记信息数组,数组中每一项包含了是否为最新版本、对象key、最新修改时间、拥有者和版本Id等信息。
Delimiter *string 与请求中设置的Delimiter一致。
EncodingType *string 返回对象key的字符编码类型。
IsTruncated *bool 当为false时表示返回结果中包含了全部符合本次请求查询条件的对象版本信息,否则只返回了MaxKeys个对象版本信息。
KeyMarker *string 与请求中设置的KeyMarker一致。
MaxKeys *int64 本次返回结果中包含的对象版本信息数量的最大值。
Name *string 执行本操作的桶名称。
NextKeyMarker *string 当返回结果中的IsTruncated为true时,可以使用NextKeyMarker作为下次查询请求中的KeyMarker,继续查询出下一部分的对象版本信息。
NextVersionIdMarker *string 本次查询返回的最后一个对象版本id。
Prefix *string 与请求中设置的Prefix一致。
Versions []*ObjectVersion 对象版本信息的数组,数组中每一项包含了对象的Entity Tag、是否为最新版本、对象key、最新修改时间、拥有者、大小、存储类型和版本Id的信息。ß
  • ListObjectVersionsRequest

ListObjectVersionsRequest操作首先生成一个"request.Request"对象,该对象是一个执行ListObjectVersions操作的请求。通过调用Request对象的Send方法来获取对象版本信息 。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。

代码示例:

func ListObjectVersionsRequest(svc *s3.S3) {
    listObjectVersionsInput := &s3.ListObjectVersionsInput{
        Bucket: aws.String("exampleBucket"),
        Prefix: aws.String("exampleKey"),
    }
    req, resp := svc.ListObjectVersionsRequest(listObjectVersionsInput)

    err := req.Send()
    if err != nil {
        fmt.Printf("fail to list object versions. %v\n", err)
    } else {
        fmt.Println(resp)
    }
}

响应结果:

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