更新时间:2025-08-22 GMT+08:00

批量删除对象

功能介绍

批量删除对象特性用于将一个桶内的部分对象一次性删除,删除后不可恢复。批量删除对象要求返回结果里包含每个对象的删除结果。OBS的批量删除对象使用同步删除对象的方式,每个对象的删除结果返回给请求用户。

批量删除对象支持两种响应方式:verbose和quiet。Verbose是指在返回响应时,不管对象是否删除成功都将删除结果包含在XML响应里;quiet是指在返回响应时,只返回删除失败的对象结果,没有返回的认为删除成功。OBS默认使用verbose模式,如果用户在请求消息体中指定quiet模式的话, 使用quiet模式。

批量删除的请求消息头中必须包含Content-SHA256以及Content-Length,用以保证请求的消息体在服务端检测到网络传输如果有错,则可以检测出来。

请求消息样式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
POST /?delete HTTP/1.1  
Host: bucketname.obs.region.myhuaweicloud.com 
Date: date
Authorization: authorization
Content-SHA256: SHA256
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>

请求消息参数

该请求的请求消息中不使用消息参数。

请求消息头

该请求使用公共消息头,具体请参考表3

请求消息元素

该请求通过在请求消息的消息元素中指定要批量删除的对象列表,元素的具体含义如表1所示。

表1 请求消息元素

参数名称

是否必选

参数类型

描述

Delete

XML

参数解释:

待删除的对象列表,Delete是Object、Quiet的父节点。

约束限制:

不涉及

取值范围:

请详见表2

默认取值:

不涉及

EncodingType

String

参数解释:

用于指定待删除的对象名和响应中的对象名的编码类型。如果对象名包含xml 1.0标准不支持的控制字符,可通过设置该元素指定对象名的编码类型。

约束限制:

仅支持URL编码类型。

取值范围:

url

默认取值:

不涉及

表2 Delete参数说明

参数名称

是否必选

参数类型

描述

Quiet

Boolean

参数解释:

用于指定使用quiet模式,只返回删除失败的对象结果。

约束限制:

如果不设置此参数,取值默认为False,取值为False则被系统忽略掉。

取值范围:

  • True:只返回删除失败的对象结果。
  • False:返回所有删除对象结果。

默认取值:

False

Object

XML

参数解释:

待删除的对象,Object是Key、VersionId的父节点。

约束限制:

不涉及

取值范围:

请详见表3

默认取值:

不涉及

表3 Object参数说明

参数名称

是否必选

参数类型

描述

Key

String

参数解释:

待删除的对象名。

约束限制:

如果设置了EncodingType元素,对象名需要按照对应的编码类型进行编码。

取值范围:

长度大于0且不超过1024的字符串。

默认取值:

不涉及

VersionId

String

参数解释:

待删除的对象版本号。获取对象版本号的步骤请参考列举桶内对象

约束限制:

不涉及

取值范围:

长度为32的字符串。

默认取值:

不涉及

批量删除对象一次能接收最大对象数目为1000个,如果超出限制,服务端会返回请求不合法。

并发任务分配后,在循环删除多个对象过程中, 如果发生内部错误, 有可能出现数据不一致的情况(某个对象索引数据删除但还有元数据)。

响应消息样式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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.region.myhuaweicloud.com/doc/2015-06-30/">
<Deleted> 
    <Key>Key</Key> 
</Deleted> 
<Error> 
    <Key>Key</Key> 
    <Code>ErrorCode</Code> 
    <Message>Message</Message> 
</Error> 
</DeleteResult>

响应消息头

该请求的响应消息使用公共消息头,具体请参考表1

响应消息元素

该请求的响应通过消息元素返回删除的结果,元素的具体意义如表4中所示。

表4 响应消息元素

参数名称

参数类型

描述

DeleteResult

Container

参数解释:

批量删除对象响应消息的根节点,DeleteResult是Deleted、Error、EncodingType的父节点。

取值范围:

请详见表5

表5 DeleteResult参数说明

参数名称

参数类型

描述

Deleted

Container

参数解释:

删除成功结果的容器,Deleted是Key、VersionId、DeleteMarker、DeleteMarkerVersionId的父节点。

取值范围:

请详见表6

Error

Container

参数解释:

删除失败结果的容器,Error是Key、VersionId、Code、Message的父节点。

取值范围:

请详见表7

EncodingType

String

参数解释:

对响应中的对象名进行指定类型的编码。如果请求消息中设置了EncodingType,那响应中的对象名会被编码。

取值范围:

url

表6 Deleted参数解释

参数名称

参数类型

描述

Key

String

参数解释:

每个删除结果的对象名。

取值范围:

长度大于0且不超过1024的字符串。

VersionId

String

参数解释:

删除对象的版本号。

取值范围:

长度为32的字符串。

DeleteMarker

Boolean

参数解释:

当批量删除请求访问的桶是多版本桶时,如果创建或删除一个删除标记,返回消息中该元素的值为true。

当桶的多版本状态是开启时,不指定版本删除对象将产生一个带唯一版本号的删除标记,并不删除对象;当桶的多版本状态是Suspended时,不指定版本删除将删除版本号为null的对象,并将产生一个版本号为null的删除标记。

了解更多请参见删除OBS桶中的对象

取值范围:

true

DeleteMarkerVersionId

String

参数解释:

请求创建或删除的删除标记版本号。

当批量删除请求访问的桶是多版本桶时,如果创建或删除一个删除标记,响应消息会返回该元素。该元素在以下两种情况中会出现:

  • 用户发送不带版本删除请求,即请求只有对象名,无版本号。这种情况下,系统会创建一个删除标记,并在响应中返回该删除标记的版本号。
  • 用户发送带版本删除请求,即请求同时包含对象名以及版本号,但是该版本号标识一个删除标记。这种情况下,系统会删除此删除标记,并在响应中返回该删除标记的版本号。

了解更多请参见删除OBS桶中的对象

取值范围:

长度为32的字符串。

表7 Error参数解释

参数名称

参数类型

描述

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、如果请求消息头中不包含Content-SHA256,OBS则返回400 Bad Request。

其他错误已经包含在表2中。

请求示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
POST /test333?delete HTTP/1.1
User-Agent: curl/7.29.0
Host: 127.0.0.1
Accept: */*
Date: WED, 01 Jul 2015 04:34:21 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:8sjZWJlWmYmYnK5JqXaFFQ+vHEg=
Content-SHA256: ogX9qClMrVJUBiUSIKDFM0qO41jJM0I5SCN55/OtMyI=
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>

响应示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.ap-southeast-1.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

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>G001118A646F2ACEFFFFD24530CFB5D9</VersionId>
        <DeleteMarker>true</DeleteMarker>
        <DeleteMarkerVersionId>G001118A646F2ACEFFFFD24530CFB5D9</DeleteMarkerVersionId>
    </Deleted>
    <Deleted>
        <Key>object2</Key>
        <VersionId>G001118A646F2ACEFFFFD24530CFB5D8</VersionId>
        <DeleteMarker>true</DeleteMarker>
        <DeleteMarkerVersionId>G001118A646F2ACEFFFFD24530CFB5D8</DeleteMarkerVersionId>
    </Deleted>
</DeleteResult>

请求示例:请求中的XML格式不正确

缺少Delete结束标签
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>
    <Quiet>true</Quiet>
    <Object>
        <Key>object1</Key>
    </Object>
    <Object>
        <Key>object2</Key>
    </Object>

响应示例:请求中的XML格式不正确

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"?>
<Error>
    <Code>MalformedXML</Code>
    <Message>The XML you provided was not well-formed or did not validate against our published schema</Message>
    <RequestId>0000018A647F5559D385F15A331DF49B</RequestId>
    <HostId>buloGEikvQr7lmiZEtHxD9nO2owRwBRGQfbap4E9MFTp1YJJV66rkJNLl7cs3Zlz</HostId>
</Error>