批量删除对象
- DeleteObjects
DeleteObjects操作可以实现通过一个HTTP请求批量删除多个对象的功能,可以减少发起多起请求去删除大量对象的花销。DeleteObjects操作发起一个包含了最多1000个key的删除请求,媒体存储服务会对相应的对象逐个进行删除,并且将删除成功或者失败的结果通过response返回。如果请求删除的对象不存在,会返回已删除的结果。
DeleteObjects操作返回verbose 和quiet两种response模式。 verbose response是默认的返回模式,该模式的返回结果包含了每个key的删除结果。quiet response返回模式返回的结果仅包含了删除失败的key,对于一个完全成功的删除操作,该返回模式不在相应消息体中返回任何信息。
代码示例:
// 批量删除对象
func DeleteObjects(svc *s3.S3) {
deleteObjectsInput := &s3.DeleteObjectsInput{
Bucket: aws.String("exampleBucket"),
Delete: &s3.Delete{
Objects: []*s3.ObjectIdentifier{
{
Key: aws.String("exampleKey1"),
},
{
Key: aws.String("exampleKey2"),
},
},
Quiet: aws.Bool(false),
},
}
deleteObjectsOutput, err := svc.DeleteObjects(deleteObjectsInput)
if err != nil {
fmt.Printf("Failed to delete objects. %v\n", err)
} else {
fmt.Println(deleteObjectsOutput)
}
}
DeleteObjectsInput可设置的参数如下:
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
Bucket | *string | 执行本操作的桶名称。 | 是 |
Delete | *Delete | 封装了要删除对象信息(Key、VersionId)和删除模式等信息 | 是 |
DeleteObjectsOutput返回的属性如下:
参数 | 类型 | 说明 |
---|---|---|
Deleted | []*DeletedObject | 被删除对象信息的数组,数组中每一项包含了一个被成功删除的对象的信息,包括删除标记、对象key和版本id等信息。 |
Errors | []*Error | 删除失败的对象信息的数组,数组中每一项包含了一个删除失败的对象的信息,包括错误码、 |
RequestCharged | *string | 如果返回结果中包含该属性,表示请求的发起者对该次请求操作付费。 |
- DeleteObjectsRequest
DeleteObjectsRequest操作首先生成一个"request.Request"对象,该对象是一个执行DeleteObjects操作的请求。通过调用Request对象的Send方法完成批量删除对象的操作。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。
代码示例:
func DeleteObjectsRequest(svc *s3.S3) {
deleteObjectsInput := &s3.DeleteObjectsInput{
Bucket: aws.String("exampleBucket"),
Delete: &s3.Delete{
Objects: []*s3.ObjectIdentifier{
{
Key: aws.String("exampleKey1"),
},
{
Key: aws.String("exampleKey2"),
},
},
Quiet: aws.Bool(false),
},
}
req, resp := svc.DeleteObjectsRequest(deleteObjectsInput)
err := req.Send()
if err != nil {
fmt.Printf("fail to delete objects. %v\n", err)
} else {
fmt.Println(resp)
}
}
响应结果:
HTTP状态 | 响应码 | 描述 |
---|---|---|
200 | Success | 操作成功。 |
400 | InvalidArgument | 当前资源池暂不支持批量删除对象操作。 |
403 | AccessDenied | 用户没有权限执行操作。 |