获取对象元数据

  • HeadObject

HeadObject操作用于获取对象的元数据信息。执行HeadObject操作需要具有对该对象的READ权限,HeadObject操作的请求参数与GetObject操作一样,区别在于HeadObject操作响应体中没有body部分。

代码示例:

// 获取对象元数据
func HeadObject(svc *s3.S3) {
    headObjectInput := &s3.HeadObjectInput{
        Bucket: aws.String("exampleBucket"),
        Key:    aws.String("exampleKey"),
    }

    headObjectOutput, err := svc.HeadObject(headObjectInput)
    if err != nil {
        fmt.Printf("fail to head object. %v\n", err)
        return
    }
    fmt.Printf("object info: %v\n", headObjectOutput)
}

HeadObjectInput可设置的参数如下:

参数 类型 说明 是否必要
Bucket *string 执行本操作的桶名称。
IfMatch *string 用于指定只有在对象的ETag和该参数值匹配的情况下才返回对象数据,否则返回412错误码。
IfModifiedSince *time.Time 用于只有当对象在指定时间后被修改的情况下才返回该对象,否则返回304错误码。
IfNoneMatch *string 用于指定只有在对象的ETag和该参数值不匹配的情况下才返回对象数据,否则返回304错误码
IfUnmodifiedSince *time.Time 用于仅当对象自指定时间以来未被修改的情况下才返回对象数据,否则返回412错误码。
Key *string 对象的key。
PartNumber *int64 读取对象指定的片段,该参数大于等于1,小于等于10000。
Range *string 指定对象的数据范围(单位:字节),必须是"bytes=first-last"的格式,例如"bytes=0-9"表示前10字节的数据,详情请参见RFC2616
VersionId *string 当bucket开启版本控制的时候,用于指定获取指定版本的对象数据,当不指定该参数的时候,默认获取最新版本的对象数据。

HeadObjectOutput返回的属性如下:

参数 类型 说明
ContentLength *int64 本次请求返回对象数据的大小(单位:字节)。
ContentType *string 对象文件格式的标准MIME类型
ETag *string 对象的Entity Ttag
LastModified *time.Time 最近一次修改对象的时间。
VersionId *string 对象最新的版本ID。
  • HeadObjectRequest

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

代码示例:

func HeadObjectRequest(svc *s3.S3) {
    headObjectInput := &s3.HeadObjectInput{
        Bucket: aws.String("exampleBucket"),
        Key:    aws.String("exampleKey"),
    }
    req, resp := svc.HeadObjectRequest(headObjectInput)

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

响应结果:

HTTP状态 响应码 描述
200 Success 操作成功。
403 Forbidden 用户没有权限执行操作。
404 NotFound 操作指定的桶不存在或者key对应的对象不存在。
416 InvalidRange Range指定的范围不合法。