删除对象

最近更新时间:2024-08-14 14:20:21

我的收藏

简介

本文介绍对象存储 COS 通过 Java SDK 实现删除对象功能的示例代码和描述。

注意事项

若您使用删除单个对象接口,需要具有目标对象的删除权限:在您进行 授权策略 时,action 需要设置为cos:DeleteObject,更多授权请参见 支持CAM的业务接口
若您在匿名访问场景下使用删除多个对象接口,需要具有所有目标对象的删除权限和批删权限:在您进行 授权策略 时,action 需要设置为cos:DeleteObjectcos:DeleteMultipleObjects,更多授权请参见 支持CAM的业务接口
若您在非匿名访问场景下使用删除多个对象接口,需要具有所有目标对象的删除权限:在您进行 授权策略 时,action 需要设置为cos:DeleteObject,更多授权请参见 支持CAM的业务接口

相关示例

功能名称
描述
示例代码
删除对象
提供了删除单个对象和删除多个对象功能

前期准备

创建 COSClient

调用 COS 的接口之前,必须先创建一个 COSClient 的实例。
说明:
COSClient 实例是并发安全的,这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。
// 创建 COSClient 实例,这个实例用来后续调用请求
COSClient createCOSClient() {
// 设置用户身份信息。
// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
// ClientConfig 中包含了后续请求 COS 的客户端设置:
ClientConfig clientConfig = new ClientConfig();
// 设置 bucket 的地域
// COS_REGION 请参见 https://cloud.tencent.com/document/product/436/6224
clientConfig.setRegion(new Region("COS_REGION"));
// 以下的设置,是可选的:
// 设置 socket 读取超时,默认 30s
// clientConfig.setSocketTimeout(30*1000);
// 设置建立连接超时,默认 30s
// clientConfig.setConnectionTimeout(30*1000);
// 如果需要的话,设置 http 代理,ip 以及 port
// clientConfig.setHttpProxyIp("httpProxyIp");
// clientConfig.setHttpProxyPort(80);
// 生成 cos 客户端。
return new COSClient(cred, clientConfig);
}

使用临时密钥创建 COSClient

如果要使用临时密钥请求 COS,则需要用临时密钥创建 COSClient 实例。
说明:
COSClient 实例是并发安全的,这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。
使用临时密钥创建 COSClient 实例之前,需要先生成临时密钥,本 SDK 并不能生成临时密钥,而需要使用额外的操作来生成,参考 临时密钥生成及使用指引
// 创建 COSClient 实例,这个实例用来后续调用请求
COSClient createCOSClient() {
// 这里需要已经获取到临时密钥的结果。
// 临时密钥的生成参见 https://cloud.tencent.com/document/product/436/14048#cos-sts-sdk
String tmpSecretId = "TMPSECRETID";
String tmpSecretKey = "TMPSECRETKEY";
String sessionToken = "SESSIONTOKEN";

COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);

// ClientConfig 中包含了后续请求 COS 的客户端设置:
ClientConfig clientConfig = new ClientConfig();

// 设置 bucket 的地域
// COS_REGION 请参见 https://cloud.tencent.com/document/product/436/6224
clientConfig.setRegion(new Region("COS_REGION"));

// 以下的设置,是可选的:

// 设置 socket 读取超时,默认 30s
// clientConfig.setSocketTimeout(30*1000);
// 设置建立连接超时,默认 30s
// clientConfig.setConnectionTimeout(30*1000);

// 如果需要的话,设置 http 代理,ip 以及 port
// clientConfig.setHttpProxyIp("httpProxyIp");
// clientConfig.setHttpProxyPort(80);

// 生成 cos 客户端。
return new COSClient(cred, clientConfig);
}

关闭 COSClient

当不会再通过一个COSClient实例发起请求的时候,请及时将其关闭,防止资源泄露。
cosclient.shutdown();

使用案例

删除单个对象

删除指定的对象(DELETE Object)。

方法原型

public void deleteObject(String bucketName, String key)
throws CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
COSClient cosClient = createCOSClient();

// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";
// 对象键(Key)是对象在存储桶中的唯一标识。详情请参见 [对象键](https://cloud.tencent.com/document/product/436/13324)
String key = "exampleobject";

try {
cosClient.deleteObject(bucketName, key);
} catch (CosServiceException e) {
e.printStackTrace();
} catch (CosClientException e) {
e.printStackTrace();
}

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
bucketName
Bucket 的命名格式为 BucketName-APPID ,详情请参见 命名规范
String
key
对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键
String

返回结果说明

成功:无返回值。
失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理

批量删除对象

删除指定的一批对象(DELETE Multiple Objects)。

方法原型

public DeleteObjectsResult deleteObjects(DeleteObjectsRequest deleteObjectsRequest)
throws MultiObjectDeleteException, CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
COSClient cosClient = createCOSClient();

// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";

DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);
// 设置要删除的key列表, 最多一次删除1000个
ArrayList<KeyVersion> keyList = new ArrayList<>();
// 传入要删除的文件名
// 注意文件名不允许以正斜线/或者反斜线\\开头,例如:
// 存储桶目录下有a/b/c.txt文件,如果要删除,只能是 keyList.add(new KeyVersion("a/b/c.txt")),
// 若使用 keyList.add(new KeyVersion("/a/b/c.txt"))会导致删除不成功
keyList.add(new KeyVersion("aaa"));
keyList.add(new KeyVersion("bbb"));
keyList.add(new KeyVersion("ccc"));
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) {
e.printStackTrace();
} catch (CosClientException e) {
e.printStackTrace();
}

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
deleteObjectsRequest
请求
DeleteObjectsRequest
Request 成员说明:
参数名称
描述
类型
bucketName
Bucket 的命名格式为 BucketName-APPID ,详情请参见 命名规范
String
quiet
指明删除的返回结果方式,可选值为 true,false,默认为 false。设置为 true 只返回失败的错误信息,设置为 false 时返回成功和失败的所有信息
boolean
keys
对象路径列表,对象的版本号为可选
List<DeleteObjectsRequest.KeyVersion>
DeleteObjectsRequest.KeyVersion 成员说明:
参数名称
描述
类型
key
对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为doc/picture.jpg,详情请参见 对象键
String
version
在开启存储桶版本控制时,指定被删除对象的版本号,可选
String

返回结果说明

成功:无返回值。
失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException,详情请参见 异常处理

批量删除指定版本的对象

删除指定的一批带版本号的对象(DELETE Multiple Objects)。
说明:
需要对应的 bucket 开启版本控制。

方法原型

public DeleteObjectsResult deleteObjects(DeleteObjectsRequest deleteObjectsRequest)
throws MultiObjectDeleteException, CosClientException, CosServiceException;

请求示例

// 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
// 详细代码参见本页:简单操作 -> 创建 COSClient
COSClient cosClient = createCOSClient();

// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";

DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);
// 设置要删除的 key 列表, 最多一次删除1000个
ArrayList<KeyVersion> keyList = new ArrayList<>();
// 传入要删除的文件名和对应的版本号
// 版本号可以通过:列出对象 -> 简单操作 -> 列出对象历史版本 查到
keyList.add(new KeyVersion("aaa", "versionId"));
keyList.add(new KeyVersion("bbb", "versionId"));
keyList.add(new KeyVersion("ccc", "versionId"));
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) {
e.printStackTrace();
} catch (CosClientException e) {
e.printStackTrace();
}

// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
deleteObjectsRequest
请求
DeleteObjectsRequest
Request 成员说明:
参数名称
描述
类型
bucketName
Bucket 的命名格式为 BucketName-APPID ,详情请参见 命名规范
String
quiet
指明删除的返回结果方式,可选值为 true,false,默认为 false。设置为 true 只返回失败的错误信息,设置为 false 时返回成功和失败的所有信息
boolean
keys
对象路径列表,对象的版本号为可选
List<DeleteObjectsRequest.KeyVersion>
DeleteObjectsRequest.KeyVersion 成员说明:
参数名称
描述
类型
key
对象键(Key)是对象在存储桶中的唯一标识。例如,在对象的访问域名 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg 中,对象键为 doc/picture.jpg,详情请参见 对象键
String
version
在开启存储桶版本控制时,指定被删除对象的版本号,可选
String

返回结果说明

成功:无返回值。
失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException,详情请参见 异常处理

API 操作

关于删除单个对象的 API 接口说明,请参见 DELETE Object 文档。
关于删除多个对象的 API 接口说明,请参见 DELETE Multiple Objects 文档。