DeleteMultipleObjects 接口请求可以批量删除指定存储桶中的多个对象(Object),单次请求支持删除1–1000个对象。本接口提供两种响应模式:
Quiet 模式:响应中仅包含删除失败的对象信息和错误信息。
Verbose 模式:响应中包含每个对象的删除结果信息。
注意事项
单个对象的删除行为
单个对象的删除语义与 DeleteObject 一致:对象键以
/ 结尾代表目录对象,不以 / 结尾代表文件对象,本接口不会对对象键末尾做任何容错。需重点关注的是:本接口起始状态码始终为 200 OK,单个对象删除失败不再以 HTTP 状态码呈现,而是以对象级错误码(例如非空目录对象的 DirNotEmpty 呈现于响应体的 <Error> 列表中)返回。单次请求对象数量限制
单次请求中携带的对象数量必须为1–1000个,否则将返回
400 InvalidArgument。请求体中未携带任何 <Object> 节点、或携带超过1000个<Object> 节点时均按此处理。请求
请求语法
POST /?delete HTTP/1.1Host: <BucketName-APPID>.cosrapid.<Region>.myqcloud.comDate: <GMT Date>Content-Type: application/xmlContent-Length: <Content Length>Content-MD5: <MD5>Authorization: <Auth String>[Request Body]
说明:
请求参数
此接口无请求参数。
请求头部
Header 名称 | 描述 | 类型 | 是否必选 |
Content-MD5 | RFC 1864 中定义的请求体内容的 MD5 校验值(Base64 编码)。若携带该头部,服务端会与实际接收到的请求体计算结果进行比对,不一致时返回 BadDigest | string | 否 |
请求体
请求体为
application/xml 格式,包含要删除的对象信息:<Delete><Quiet>boolean</Quiet><Object><Key>string</Key></Object><Object><Key>string</Key></Object></Delete>
具体节点说明:
节点名称 | 父节点 | 描述 | 类型 | 是否必选 |
Delete | 无 | 包含 DeleteMultipleObjects 操作的所有请求信息 | Container | 是 |
Quiet | Delete | 是否使用 Quiet 模式,默认为 false(Verbose 模式);两种模式的差异详见上文接口简介 | boolean | 否 |
Object | Delete | 单个要删除的目标对象的信息 | Container | 是 |
Key | Delete.Object | 要删除的目标对象的对象键(无需以 / 开头)。对象键以 / 结尾代表目录对象 | string | 是 |
响应
响应头部
响应体
响应体为
application/xml 格式:<DeleteResult><Deleted><Key>string</Key></Deleted><Error><Key>string</Key><Code>string</Code><Message>string</Message></Error></DeleteResult>
具体节点说明:
节点名称 | 父节点 | 描述 | 类型 |
DeleteResult | 无 | 保存 DeleteMultipleObjects 结果的所有信息 | Container |
Deleted | DeleteResult | 单个删除成功的对象条目,仅当请求中 <Quiet> 为 false 时才会返回该元素 | Container |
Error | DeleteResult | 单个删除失败的对象条目;无论 Quiet 模式如何,删除失败的对象均会出现在该列表中 | Container |
Deleted 节点包含的子节点:节点名称 | 父节点 | 描述 | 类型 |
Key | DeleteResult.Deleted | 删除成功的对象的对象键 | string |
Error 节点包含的子节点:节点名称 | 父节点 | 描述 | 类型 |
Key | DeleteResult.Error | 删除失败的对象的对象键 | string |
Code | DeleteResult.Error | 删除失败的错误码,用来定位唯一的错误条件和确定错误场景 | string |
Message | DeleteResult.Error | 删除失败的具体错误信息 | string |
错误码
实际案例
案例一:批量删除(Verbose 模式)
请求
POST /?delete HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 29 May 2019 04:10:12 GMTContent-Type: application/xmlContent-Length: 158Content-MD5: zUd/xgzNGDrqJMJUOWV2AQ==Authorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1559074212;1559077812&q-key-time=1559074212;1559077812&q-header-list=content-length;content-md5;content-type;date;host&q-url-param-list=delete&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<Delete><Quiet>false</Quiet><Object><Key>example-object-1.jpg</Key></Object><Object><Key>example-object-2.jpg</Key></Object></Delete>
响应
HTTP/1.1 200 OKContent-Type: application/xmlConnection: keep-aliveDate: Wed, 29 May 2019 04:10:12 GMTx-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw<DeleteResult><Deleted><Key>example-object-1.jpg</Key></Deleted><Deleted><Key>example-object-2.jpg</Key></Deleted></DeleteResult>
案例二:批量删除(Quiet 模式)
请求
POST /?delete HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 29 May 2019 04:10:12 GMTContent-Type: application/xmlContent-Length: 157Authorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1559074212;1559077812&q-key-time=1559074212;1559077812&q-header-list=content-length;content-type;date;host&q-url-param-list=delete&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<Delete><Quiet>true</Quiet><Object><Key>example-object-1.jpg</Key></Object><Object><Key>example-object-2.jpg</Key></Object></Delete>
响应
所有对象均删除成功时,响应体为空
DeleteResult:HTTP/1.1 200 OKContent-Type: application/xmlConnection: keep-aliveDate: Wed, 29 May 2019 04:10:12 GMTx-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw<DeleteResult></DeleteResult>
案例三:批量删除目录对象(部分失败)
本案例演示批量删除时其中一个目录对象因非空而失败的场景。
请求
POST /?delete HTTP/1.1Host: examplebucket-x--1250000000.cosrapid.ap-guangzhou.myqcloud.comDate: Wed, 29 May 2019 04:10:12 GMTContent-Type: application/xmlContent-Length: 200Authorization: q-sign-algorithm=sha1&q-ak=AKIDXXXXXXXX&q-sign-time=1559074212;1559077812&q-key-time=1559074212;1559077812&q-header-list=content-length;content-type;date;host&q-url-param-list=delete&q-signature=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<Delete><Quiet>false</Quiet><Object><Key>example-object-1.jpg</Key></Object><Object><Key>folder-empty/</Key></Object><Object><Key>folder-non-empty/</Key></Object></Delete>
响应
HTTP/1.1 200 OKContent-Type: application/xmlConnection: keep-aliveDate: Wed, 29 May 2019 04:10:12 GMTx-cos-request-id: NjUwMDAwMDAwMDAwMDAwMDAw<DeleteResult><Deleted><Key>example-object-1.jpg</Key></Deleted><Deleted><Key>folder-empty/</Key></Deleted><Error><Key>folder-non-empty/</Key><Code>DirNotEmpty</Code><Message>Directory not empty.</Message></Error></DeleteResult>