批量删除对象
功能介绍
批量删除对象特性用于将一个桶内的部分对象一次性删除,删除后不可恢复。批量删除对象要求返回结果里包含每个对象的删除结果。OBS的批量删除对象使用同步删除对象的方式,每个对象的删除结果返回给请求用户。
批量删除对象支持两种响应方式:verbose和quiet。Verbose是指在返回响应时,不管对象是否删除成功都将删除结果包含在XML响应里;quiet是指在返回响应时,只返回删除失败的对象结果,没有返回的认为删除成功。OBS默认使用verbose模式,如果用户在请求消息体中指定quiet模式的话, 使用quiet模式。
批量删除的请求消息头中必须包含Content-MD5以及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.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> |
请求消息参数
该请求的请求消息中不使用消息参数。
请求消息头
该请求使用公共消息头,具体请参考表3。
请求消息元素
该请求通过在请求消息的消息元素中指定要批量删除的对象列表,元素的具体含义如表1所示。
元素名称 |
描述 |
是否必须 |
---|---|---|
Quiet |
用于指定使用quiet模式,只返回删除失败的对象结果;如果有此字段,则必被置为True,如果为False则被系统忽略掉。 类型:Boolean |
否 |
EncodingType |
用于指定待删除的对象Key和响应中的对象Key的编码类型。如果Key包含xml 1.0标准不支持的控制字符,可通过设置该元素指定对象Key的编码类型。 类型:String 可选值:url。 |
否 |
Delete |
待删除的对象列表。 类型:XML |
是 |
Object |
待删除的对象。 类型:XML |
是 |
Key |
待删除的对象Key。如果设置了EncodingType元素,对象Key需要按照对应的编码类型进行编码。 类型:String |
是 |
VersionId |
待删除的对象版本号。 类型:String |
否 |
批量删除对象一次能接收最大对象数目为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.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> |
响应消息头
该请求的响应消息使用公共消息头,具体请参考表1。
响应消息元素
该请求的响应通过消息元素返回删除的结果,元素的具体意义如表2中所示。
字段名称 |
描述 |
---|---|
DeleteResult |
批删响应的根节点。 类型:Container |
Deleted |
删除成功结果的Container。 类型:Container |
Error |
删除失败结果的Container。 类型:Container |
EncodingType |
对响应中的Key进行指定类型的编码。如果请求消息中设置了EncodingType,那响应中的Key会被编码。 类型:String |
Key |
每个删除结果的对象名。 类型:String |
Code |
删除失败结果的错误码。 类型:String |
Message |
删除失败结果的错误消息。 类型:String |
VersionId |
删除对象的版本号 类型:String |
DeleteMarker |
当批量删除请求访问的桶是多版本桶时,如果创建或删除一个删除标记,返回消息中该元素的值为true。 类型:Boolean |
DeleteMarkerVersionId |
请求创建或删除的删除标记版本号。 当批量删除请求访问的桶是多版本桶时,如果创建或删除一个删除标记,响应消息会返回该元素。该元素在以下两种情况中会出现:
类型:Boolean |
错误响应消息
1、用户收到请求后首先进行XML的解析,如果超过1000个对象返回400 Bad Request。
2、如果XML消息体中包含的对象Key不合法,比如长度超过了经过UTF-8编码后的1024字符序列,OBS返回400 Bad Request。
3、如果请求消息头中不包含Content-MD5,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-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> |
响应示例
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.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
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格式不正确
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>