全部产品
Search
文档中心

对象存储 OSS:DeleteMultipleObjects

更新时间:May 21, 2024

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提供以下两种消息返回模式:

  • 简单模式(quiet):OSS不返回消息体。

  • 详细模式(verbose):OSS返回的消息体中会包含所有删除Object的结果。默认采用详细模式。

有效值: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如下:

相关文档

错误码

错误码

HTTP 状态码

描述

InvalidDigest

400

上传了Content-MD5请求头后,OSS会计算消息体的Content-MD5并检查一致性,如果不一致会返回此错误码。

MalformedXML

400

  • 消息体最大允许2 MB的内容,超过2 MB则返回此错误码。

  • 单次调用DeleteMultipleObjects接口最多支持删除1000个Object。单次请求超过1000个Object返回此错误码。

FileImmutable

409

Bucket内的数据处于被保护状态时,若您尝试删除或修改这些数据,将返回此错误码。