DeleteMultipleObjects接口用于删除同一个存储空间(Bucket)中的多个文件(Object)。
单次调用DeleteMultipleObjects接口最多允许删除1000个文件。
文件删除后无法恢复,请谨慎操作。关于删除文件的更多信息,请参见删除文件。
版本控制
在开启版本控制的Bucket中,同样可以使用DeleteMultipleObjects接口来批量删除Object。在Delete请求中如果没有指定versionId,将插入删除标记。如果指定了versionId,将永久删除该Object的指定版本。
请求语法
POST /?delete HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Content-Length: ContentLength
Content-MD5: MD5Value
Authorization: SignatureValue
<?xml version="1.0" encoding="UTF-8"?>
<Delete>
<Quiet>true</Quiet>
<Object>
<Key>key</Key>
</Object>
…
</Delete>
请求头
OSS会根据以下请求头验证收到的消息体,消息体正确才会执行删除操作。
名称 | 类型 | 是否必选 | 示例值 | 描述 |
Encoding-type | 字符串 | 否 | url | Key使用UTF-8字符。如果Key中包含XML 1.0标准不支持的控制字符,您可以通过指定Encoding-type对返回结果中的Key进行编码。 默认值:无 可选值:url |
Content-Length | 字符串 | 是 | 151 | 用于描述HTTP消息体的传输长度。 OSS会根据此请求头验证收到的消息体,消息体正确才会执行删除操作。 |
Content-MD5 | 字符串 | 是 | ohhnqLBJFiKkPSBO1eNaUA== | Content-MD5是一串由MD5算法生成的值,该请求头用于检查消息内容是否与发送时一致。上传了Content-MD5请求头后,OSS会计算消息体的Content-MD5并检查一致性。 说明 将DeleteMultipleObjects的请求消息体经过MD5加密后得到一个128位字节数组。然后将该字节数组用base64算法编码,编码后得到的字符串即Content-MD5字段内容。 |
请求元素
名称 | 类型 | 是否必选 | 示例值 | 描述 |
Delete | 容器 | 是 | 不涉及 | 保存DeleteMultipleObjects请求的容器。 子节点:一个或多个Object元素,Quiet元素 父节点: None |
Object | 容器 | 是 | 不涉及 | 保存一个Object信息的容器。 子节点:Key 父节点:Delete |
Key | 字符串 | 是 | test.jpg | 被删除Object的名字。 父节点:Object |
Quiet | 枚举字符串 | 是 | false | 打开简单响应模式的开关。 DeleteMultipleObjects提供以下两种消息返回模式:
有效值:true(开启简单模式)、false(开启详细模式) 默认值:false 父节点:Delete |
VersionId | 字符串 | 否 | CAEQNRiBgIDyz.6C0BYiIGQ2NWEwNmVhNTA3ZTQ3MzM5ODliYjM1ZTdjYjA4**** | 被删除Object的版本号。 父节点:Object |
响应元素
名称 | 类型 | 示例值 | 描述 |
Deleted | 容器 | 不涉及 | 保存成功删除的Object的容器。 重要 返回的响应元素Deleted仅保存成功删除的Object,不保存删除失败的Object。您可以通过对比发起批量删除请求前与删除后返回的Deleted元素中保存的Object列表之间的差异,获取删除失败的Object名称。 子节点:Key 父节点:DeleteResult |
DeleteResult | 容器 | 不涉及 | 保存DeleteMultipleObjects请求结果的容器。 子节点:Deleted 父节点:None |
Key | 字符串 | demo.jpg | 被删除Object的名字。 父节点:Deleted |
EncodingType | 字符串 | url | 返回结果中编码使用的类型。如果请求的参数中指定了Encoding-type,则返回的结果会对Key进行编码。 父节点:容器 |
DeleteMarker | 布尔 | true | 表示该版本是否为DeleteMarker。true为是,false为否。 说明 只有当创建删除标记和永久删除DeleteMarker时,才会返回该元素,且值为true。 |
DeleteMarkerVersionId | 字符串 | THUQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk**** | 表示删除标记对应的版本ID。 父节点:Deleted |
示例
关闭简单响应模式的请求示例
POST /?delete HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Wed, 29 Feb 2012 12:26:16 GMT Content-Length:151 Content-MD5: ohhnqLBJFiKkPSBO1eNaUA== Authorization: OSS qn6q**************:77Dv**************** <?xml version="1.0" encoding="UTF-8"?> <Delete> <Quiet>false</Quiet> <Object> <Key>multipart.data</Key> </Object> <Object> <Key>test.jpg</Key> </Object> <Object> <Key>demo.jpg</Key> </Object> </Delete>
返回示例
HTTP/1.1 200 OK x-oss-request-id: 78320852-7eee-b697-75e1-b6db0f4849e7 Date: Wed, 29 Feb 2012 12:26:16 GMT Content-Length: 244 Content-Type: application/xml Connection: keep-alive Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <DeleteResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”> <Deleted> <Key>multipart.data</Key> </Deleted> <Deleted> <Key>test.jpg</Key> </Deleted> <Deleted> <Key>demo.jpg</Key> </Deleted> </DeleteResult>
打开简单响应模式的请求示例
POST /?delete HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Wed, 29 Feb 2012 12:33:45 GMT Content-Length:151 Content-MD5: ohhnqLBJFiKkPSBO1eNaUA== Authorization: OSS qn6q**************:77Dv**************** <?xml version="1.0" encoding="UTF-8"?> <Delete> <Quiet>true</Quiet> <Object> <Key>multipart.data</Key> </Object> <Object> <Key>test.jpg</Key> </Object> <Object> <Key>demo.jpg</Key> </Object> </Delete>
返回示例
HTTP/1.1 200 OK x-oss-request-id: 559CC9BDC755F95A64485981 Date: Wed, 29 Feb 2012 12:33:45 GMT Content-Length: 0 Connection: keep-alive Server: AliyunOSS
未指定versionID执行DeleteMultipleObjects操作的请求示例
POST /?delete HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 04:20:03 GMT Content-MD5: xSLOYWaPC86RPwWXNiFeXg== Authorization: OSS qn6q**************:77Dv**************** <?xml version="1.0" encoding="UTF-8"?> <Delete> <Quiet>false</Quiet> <Object> <Key>multipart.data</Key> </Object> <Object> <Key>test.jpg</Key> </Object> </Delete>
返回示例
以下示例中由于要删除的两个Object(multipart.dat和test.jpg)都未指定versionId,因此OSS为其插入了删除标记,并返回<DeleteMarker>true</DeleteMarker>和<DeleteMarkerVersionId>XXXXXX</DeleteMarkerVersionId>。
HTTP/1.1 200 OK x-oss-request-id: 5CAC1D73B7AEADE01700**** Date: Tue, 09 Apr 2019 04:20:03 GMT Content-Type: application/xml Connection: keep-alive Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <DeleteResult> <Deleted> <Key>multipart.data</Key> <DeleteMarker>true</DeleteMarker> <DeleteMarkerVersionId>CAEQMhiBgIDXiaaB0BYiIGQzYmRkZGUxMTM1ZDRjOTZhNjk4YjRjMTAyZjhl****</DeleteMarkerVersionId> </Deleted> <Deleted> <Key>test.jpg</Key> <DeleteMarker>true</DeleteMarker> <DeleteMarkerVersionId>CAEQMhiBgIDB3aWB0BYiIGUzYTA3YzliMzVmNzRkZGM5NjllYTVlMjYyYWEy****</DeleteMarkerVersionId> </Deleted> </DeleteResult>
指定versionId来删除指定版本Object的请求示例
说明指定versionId的同时必须指定Key。
POST /?delete HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 06:09:34 GMT Content-Length:151 Content-MD5: 2Tpk+dL/tGyuSA+YCEuSVg== Authorization: OSS qn6q**************:77Dv**************** <?xml version="1.0" encoding="UTF-8"?> <Delete> <Quiet>false</Quiet> <Object> <Key>multipart.data</Key> <VersionId>CAEQNRiBgIDyz.6C0BYiIGQ2NWEwNmVhNTA3ZTQ3MzM5ODliYjM1ZTdjYjA4****</VersionId> </Object> </Delete>
返回示例
示例中返回了被删除的对象Key和相应的版本ID。
HTTP/1.1 200 OK x-oss-request-id: 5CAC371EB7AEADE01700**** Date: Tue, 09 Apr 2019 06:09:34 GMT Content-Length: 244 Content-Type: application/xml Connection: keep-alive Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <DeleteResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”> <Deleted> <Key>multipart.data</Key> <VersionId>CAEQNRiBgIDyz.6C0BYiIGQ2NWEwNmVhNTA3ZTQ3MzM5ODliYjM1ZTdjYjA4****</VersionId> </Deleted> </DeleteResult>
指定versionId来删除DeleteMarker的请求示例
POST /?delete HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 06:14:50 GMT Content-Length: 178 Content-MD5: dX9IFePFgYhmINvAhG30Bg== Authorization: OSS qn6q**************:77Dv**************** <?xml version="1.0" encoding="UTF-8"?> <Delete> <Quiet>false</Quiet> <Object> <Key>multipart.data</Key> <VersionId>CAEQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****</VersionId> </Object> </Delete>
返回示例
示例中返回的Key和VersionId分别代表被删除的对象Key及其对应的版本ID。
DeleteMarker和DeleteMarkerVersionId分别代表被删除的是删除标记及其对应的版本ID,此时的VersionId和DeleteMarkerVersionId相同,且DeleteMarker和DeleteMarkerVersionId同时出现。
HTTP/1.1 200 OK x-oss-request-id: 5CAC385AB7AEADE01700**** Date: Tue, 09 Apr 2019 06:14:50 GMT Content-Length: 364 Content-Type: application/xml Connection: keep-alive Server: AliyunOSS <?xml version="1.0" encoding="UTF-8"?> <DeleteResult xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”> <Deleted> <Key>demo.jpg</Key> <VersionId>CAEQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****</VersionId> <DeleteMarker>true</DeleteMarker> <DeleteMarkerVersionId>THUQNRiBgICEoPiC0BYiIGMxZWJmYmMzYjE0OTQ0ZmZhYjgzNzkzYjc2NjZk****</DeleteMarkerVersionId> </Deleted> </DeleteResult>
SDK
DeleteMultipleObjects接口对应的各语言SDK如下:
相关文档
如果需要单个文件,请参见DeleteObject。
如果需要自动删除文件,请参见生命周期概述。
错误码
错误码 | HTTP 状态码 | 描述 |
InvalidDigest | 400 | 上传了Content-MD5请求头后,OSS会计算消息体的Content-MD5并检查一致性,如果不一致会返回此错误码。 |
MalformedXML | 400 |
|
FileImmutable | 409 | Bucket内的数据处于被保护状态时,若您尝试删除或修改这些数据,将返回此错误码。 |