获取对象元数据
- 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指定的范围不合法。 |