
# 批量删除对象-DeleteObjects
#### 功能介绍
批量删除对象特性用于将一个桶内的多个对象一次性删除，删除后不可恢复。
批量删除对象支持两种响应方式：
- quiet模式（Quiet参数设置为True）：quiet模式是指在返回响应时，只返回删除失败的对象结果，没有返回的认为删除成功。
- 非quiet模式（系统默认，或Quiet参数设置为False）：非quiet模式是指在返回响应时，不管对象是否删除成功都将删除结果包含在XML响应里。
批量删除的请求头参数（Request headers）中必须包含Content-MD5以及Content-Length，用以保证请求的消息体在服务端检测到网络传输如果有错，则可以检测出来。
#### 授权信息
您必须是对象拥有者或拥有删除对象的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:object:DeleteObject** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:object:deleteObject** 权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-obs/obs_04_0112.html#ZH-CN_TOPIC_0000002375307974__condition_table) Condition Key                                                                                                                                                                                                                                                                                          | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html) Alias | 依赖的授权项 Dependencies                                                                                                                                                                                                                                                                                                                                          |
    |:---|:---|:---|:---|:---|:---|
    | obs:object:deleteObject                             | Write                                                      | object \*                                                                         | [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                                                                                                                                                                                                                                                                                                                           | -                                                                                                               | - functiongraph:function:invokeAsync  - functiongraph:workflow:invoke  - smn:topic:publish   |
    | obs:object:deleteObject                             | Write                                                      | -                                                                                 | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                               | - functiongraph:function:invokeAsync  - functiongraph:workflow:invoke  - smn:topic:publish   |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:object:DeleteObject** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
POST /
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-obs/obs_04_0006.html)。调用前需要先[计算API签名](https://support.huaweicloud.com/api-obs/obs_04_0009.html)，并将签名添加到请求中。
您还可以使用[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/OBS/doc?api=DeleteObjects)在线调试接口。
#### 请求消息样式
```
POST /?delete HTTP/1.1  
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Date: date
Authorization: authorization
Content-MD5: MD5
Content-Length: length
<?xml version="1.0" encoding="UTF-8"?>   
<Delete> 
    <Quiet>true</Quiet>  
    <Object> 
        <Key>Key</Key> 
        <VersionId>VersionId</VersionId> 
    </Object>  
    <Object>  
        <Key>Key</Key> 
    </Object> 
</Delete>
```
#### URI参数（URI Parameters）
该请求的请求消息中不使用消息参数。
#### 请求头参数（Request headers）
该请求使用公共请求头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（Request body）
该请求通过在请求消息的消息元素中指定要批量删除的对象列表，元素的具体含义如[表1]所示。
 表1请求体参数 
| 参数名称         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| Delete       | 是    | XML    | **参数解释：** 待删除的对象列表，Delete是Object、Quiet的父节点。 请详见[表2]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                           |
| EncodingType | 否    | String | **参数解释：** 用于指定待删除的对象名和响应中的对象名的编码类型。如果对象名包含xml 1.0标准不支持的控制字符，可通过设置该元素指定对象名的编码类型。 **约束限制：** 仅支持URL编码类型。 **取值范围：** url **默认取值：** 不涉及 |
   
 表2Delete参数说明 
| 参数名称   | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| Quiet  | 否    | Boolean | **参数解释：** 用于指定使用quiet模式，只返回删除失败的对象结果。 **约束限制：** 如果不设置此参数，取值默认为False，取值为False则被系统忽略掉。 **取值范围：** - True：只返回删除失败的对象结果。  - False：返回所有删除对象结果。   **默认取值：** False |
| Object | 是    | XML     | **参数解释：** 待删除的对象，Object是Key、VersionId的父节点。详情请参见[表3]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                       |
   
 表3Object参数说明 
| 参数名称      | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| Key       | 是    | String | **参数解释：** 待删除的对象名。 **约束限制：** 如果设置了EncodingType元素，对象名需要按照对应的编码类型进行编码。 **取值范围：** 长度大于0且不超过1024的字符串。 **默认取值：** 不涉及                                                  |
| VersionId | 否    | String | **参数解释：** 待删除的对象版本号。获取对象版本号的步骤请参考[列举桶内对象-ListObjects](https://support.huaweicloud.com/api-obs/obs_04_0022.html)。 **约束限制：** 不涉及 **取值范围：** 长度为32的字符串。 **默认取值：** 不涉及 |
   
批量删除对象一次能接收最大对象数目为1000个，如果超出限制，服务端会返回请求不合法。
#### 响应消息样式
```
HTTP/1.1 status_code
Date: date
Content-Type: application/xml 
Content-Length: length
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DeleteResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> 
<Deleted> 
    <Key>Key</Key> 
</Deleted> 
<Error> 
    <Key>Key</Key> 
    <Code>ErrorCode</Code> 
    <Message>Message</Message> 
</Error> 
</DeleteResult>
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
该请求的响应通过消息元素返回删除的结果，元素的具体意义如[表4]中所示。
 表4响应体 
| **参数名称**     | 参数类型      | **描述**                                                                                                                                                                |
|:---|:---|:---|
| DeleteResult | Container | **参数解释：** 批量删除对象响应消息的根节点，DeleteResult是Deleted、Error、EncodingType的父节点。详情请参见[表5]。 |
   
 表5DeleteResult参数说明 
| **参数名称**     | 参数类型      | **描述**                                                                                                                                                                                               |
|:---|:---|:---|
| Deleted      | Container | **参数解释：** 删除成功结果的容器，Deleted是Key、VersionId、DeleteMarker、DeleteMarkerVersionId的父节点。详情请参见[表6]。                        |
| Error        | Container | **参数解释：** 删除失败结果的容器，Error是Key、VersionId、Code、Message的父节点。详情请参见[表7]。                                               |
| EncodingType | String    | **参数解释：** 对响应中的对象名进行指定类型的编码。如果请求消息中设置了EncodingType，那响应中的对象名会被编码。 **取值范围：** url |
   
 表6Deleted参数解释 
| **参数名称**              | 参数类型    | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|
| Key                   | String  | **参数解释：** 每个删除结果的对象名。同一对象名出现多次时，将按次数分别执行删除操作。 **取值范围：** 长度大于0且不超过1024的字符串。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| VersionId             | String  | **参数解释：** 删除对象的版本号。 **取值范围：** 长度为32的字符串。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| DeleteMarker          | Boolean | **参数解释：** 当批量删除请求访问的桶是多版本桶时，如果创建或删除一个删除标记，返回消息中该元素的值为true。 当桶的多版本状态是开启时，不指定版本删除对象将产生一个带唯一版本号的删除标记，并不删除对象；当桶的多版本状态是Suspended时，不指定版本删除将删除版本号为null的对象，并将产生一个版本号为null的删除标记。 了解更多请详见[删除OBS桶中的对象](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829108.html)。 **取值范围：** true                                                                                                                                                                                                                                                                                       |
| DeleteMarkerVersionId | String  | **参数解释：** 请求创建或删除的删除标记版本号。 当批量删除请求访问的桶是多版本桶时，如果创建或删除一个删除标记，响应消息会返回该元素。该元素在以下两种情况中会出现： - 用户发送不带版本删除请求，即请求只有对象名，无版本号。这种情况下，系统会创建一个删除标记，并在响应中返回该删除标记的版本号。  - 用户发送带版本删除请求，即请求同时包含对象名以及版本号，但是该版本号标识一个删除标记。这种情况下，系统会删除此删除标记，并在响应中返回该删除标记的版本号。   了解更多请详见[删除OBS桶中的对象](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829108.html)。 **取值范围：** 长度为32的字符串。 |
   
 表7Error参数解释 
| **参数名称**  | 参数类型   | **描述**                                                                                                                                                                  |
|:---|:---|:---|
| Key       | String | **参数解释：** 每个删除结果的对象名。 **取值范围：** 长度大于0且不超过1024的字符串。 |
| Code      | String | **参数解释：** 删除失败结果的错误码。 **取值范围：** 不涉及          |
| Message   | String | **参数解释：** 删除失败结果的错误消息。 **取值范围：** 不涉及           |
| VersionId | String | **参数解释：** 删除对象的版本号。 **取值范围：** 长度为32的字符串。        |
   
#### 错误响应消息
1、用户收到请求后首先进行XML的解析，如果超过1000个对象返回400 Bad Request。
2、如果XML消息体中包含的对象Key不合法，比如长度超过了经过UTF-8编码后的1024字符序列，OBS返回400 Bad Request。
3、如果请求头参数（Request headers）中不包含Content-MD5，OBS则返回400 Bad Request。
其他错误已经包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例
```
POST /?delete HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 04:34:21 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:8sjZWJlWmYmYnK5JqXaFFQ+vHEg=
Content-MD5: ZPzz8L+hdRJ6qCqYbU/pCw==
Content-Length: 188
<?xml version="1.0" encoding="utf-8"?>
<Delete> 
  <Quiet>true</Quiet>  
  <Object> 
    <Key>obja02</Key> 
  </Object>  
  <Object> 
    <Key>obja02</Key> 
  </Object> 
</Delete>
```
#### 响应示例
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 8DF400000163D3FE4CE80340D30B0542
x-obs-id-2: 32AAAQAAEAABAAAQAAEAABAAAQAAEAABCRhY0FBWRm6qjOE1ACBZwS+0KYlPBq0f
Content-Type: application/xml
Date: Wed, 01 Jul 2015 04:34:21 GMT
Content-Length: 120
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DeleteResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"/>
```
#### 请求示例：指定versionId来删除DeleteMarker
```
POST /?delete HTTP/1.1
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4=
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:37:22 GMT
Content-Type: application/xml
Content-MD5: Y4+cxEPU7U9sgVFpRbdtUQ==
 
<Delete>
    <Object>
        <Key>object1</Key>
        <VersionId>G001118A646F2ACEFFFFD24530CFB5D8</VersionId>
    </Object>
    <Object>
        <Key>object2</Key>
        <VersionId>G001118A646F2ACEFFFFD24530CFB5D9</VersionId>
    </Object>
</Delete>
```
#### 响应示例：指定versionId来删除DeleteMarker
```
HTTP/1.1 200 OK
x-obs-id-2: 32AAAUgAIAABAAAQAAEAABAAAQAAEAABCS3WJqDiMsxgGHKQrlqST9veFKpDgE50
x-obs-request-id: 0000018A4997390DD306CCDA0DEC814F
Server: OBS
Date: Wed, 01 Jul 2015 02:37:22 GMT
Content-Length: 545
Content-Type: application/xml
 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DeleteResult  xmlns="http://obs.myhwclouds.com/doc/2015-06-30/">
    <Deleted>
        <Key>object1</Key>
        <VersionId>G001118A646F2ACEFFFFD24530CFB5D8</VersionId>
        <DeleteMarker>true</DeleteMarker>
        <DeleteMarkerVersionId>G001118A646F2ACEFFFFD24530CFB5D8</DeleteMarkerVersionId>
    </Deleted>
    <Deleted>
        <Key>object2</Key>
        <VersionId>G001118A646F2ACEFFFFD24530CFB5D9</VersionId>
        <DeleteMarker>true</DeleteMarker>
        <DeleteMarkerVersionId>G001118A646F2ACEFFFFD24530CFB5D9</DeleteMarkerVersionId>
    </Deleted>
</DeleteResult>
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0804.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0918.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0604.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0506.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0704.html)  | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_0604.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_0604.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_0604.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_0604.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_0606.html) |
|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 使用obsutil删除对象，请参见[删除对象](https://support.huaweicloud.com/utiltg-obs/obs_11_0021.html)。
- 使用OBS Browser+删除对象，请参见[删除文件或文件夹](https://support.huaweicloud.com/browsertg-obs/obs_03_1066.html)。
- 了解更多删除对象相关介绍，请参见[删除对象](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829108.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
