删除多个对象

最近更新时间: 2024-12-19 17:12:00

适用场景

云平台CSP 支持直接删除一个或多个对象,当需要删除多个对象时,您只需要提供对象的名称(即对象键)列表,就可以调用一个 API 请求来删除它。

默认情况下,当删除任务都成功完成时,返回的内容通常为空。若有发生错误,则会返回错误的信息。

注意:单次请求最多可删除 1000 个对象,若需要删除更多对象,请将列表拆分后分别发送请求。

使用方法

使用 REST API

您可以直接使用 REST API 发起一个获取对象请求,可参考 Delete Multiple Object 文档说明。

使用 Java SDK

对象存储 CSP 的 Java SDK 中提供了此方法,可参考 SDK 接口文档 Delete Object 部分。

步骤说明

  1. 初始化客户端 cosclient。
  2. 执行 deleteObjects 方法删除对象,需提供要删除的对象键名称。
  3. 执行成功会返回 DeleteObjectsResult 对象,包含所有已删除的对象键。如果部分成功部分失败(如对该对象没有删除权限),则返回 MultiObjectDeleteException 类。其他失败导致的异常返回异常类(CosClientException/CosServiceException),请参照 SDK 异常类说明。

代码示例

  1. 以下代码演示了删除多个对象(无版本控制)的示例代码:
// 1 初始化用户身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
// 2 设置bucket的区域
ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));
// 3 生成csp客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// bucket名需包含appid
String bucketName = "mybucket-1251668577";

DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);
// 设置要删除的key列表, 最多一次删除1000个
ArrayList<KeyVersion> keyList = new ArrayList<>();
// 传入要删除的文件名
keyList.add(new KeyVersion("/aaa.txt"));
keyList.add(new KeyVersion("/bbb.mp4"));
keyList.add(new KeyVersion("/ccc/ddd.jpg"));
deleteObjectsRequest.setKeys(keyList);

// 批量删除文件
try {
    DeleteObjectsResult deleteObjectsResult = cosclient.deleteObjects(deleteObjectsRequest);
    List<DeletedObject> deleteObjectResultArray = deleteObjectsResult.getDeletedObjects();
} catch (MultiObjectDeleteException mde) { // 如果部分产出成功部分失败, 返回MultiObjectDeleteException
    List<DeletedObject> deleteObjects = mde.getDeletedObjects();
    List<DeleteError> deleteErrors = mde.getErrors();
} catch (CosServiceException e) { // 如果是其他错误, 比如参数错误, 身份验证不过等会抛出CosServiceException
    e.printStackTrace();
} catch (CosClientException e) { // 如果是客户端错误,比如连接不上CSP,会抛出CosClientException
    e.printStackTrace();
}
  1. 以下代码演示了删除多个对象(含有版本控制)的示例代码:
// 1 初始化用户身份信息(secretId, secretKey)
COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
// 2 设置bucket的区域
ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));
// 3 生成csp客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// bucket名需包含appid
String bucketName = "mybucket-1251668577";

DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);
// 设置要删除的key列表, 最多一次删除1000个
ArrayList<KeyVersion> keyList = new ArrayList<>();
// 传入要删除的文件名
keyList.add(new KeyVersion("/aaa.txt", "axbefagagaxxfafa"));
keyList.add(new KeyVersion("/bbb.mp4", "awcafa1faxg0lx"));
keyList.add(new KeyVersion("/ccc/ddd.jpg", "kafa1kxxaa2ymh"));
deleteObjectsRequest.setKeys(keyList);

// 批量删除文件
try {
    DeleteObjectsResult deleteObjectsResult = cosclient.deleteObjects(deleteObjectsRequest);
    List<DeletedObject> deleteObjectResultArray = deleteObjectsResult.getDeletedObjects();
} catch (MultiObjectDeleteException mde) { // 如果部分产出成功部分失败, 返回MultiObjectDeleteException
    List<DeletedObject> deleteObjects = mde.getDeletedObjects();
    List<DeleteError> deleteErrors = mde.getErrors();
} catch (CosServiceException e) { // 如果是其他错误, 比如参数错误, 身份验证不过等会抛出CosServiceException
    e.printStackTrace();
} catch (CosClientException e) { // 如果是客户端错误,比如连接不上CSP,会抛出CosClientException
    e.printStackTrace();
}