帮你快速理解、总结文档立即下载

递归删除对象

最近更新时间:2026-10-22 17:31:33
本文档已由 AI 辅助审校
我的收藏

简介

本文介绍对象存储 COS 通过 Java SDK 在智能体存储桶中递归删除目录的示例代码和描述。

注意事项

本文介绍的接口仅适用于智能体存储桶,普通存储桶的删除操作请参见 删除对象。
智能体存储桶相关接口需 COS Java SDK 5.6.283 及以上版本,SDK 的安装请参见 快速入门。
递归删除会删除目录下的所有子文件和子目录,目录较大时,建议通过 clientConfig.setSocketTimeout 调大读取超时时间。
删除对象后将不可恢复和访问,请谨慎操作。

相关示例

功能名称
描述
示例代码
递归删除对象
删除目录及其下的所有子文件和子目录

前期准备

创建 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 Recursive)。

方法原型

public DeleteObjectRecursiveResult deleteObjectRecursive(DeleteObjectRecursiveRequest deleteObjectRecursiveRequest)
throws CosClientException, CosServiceException;

请求示例

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

// 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
String bucketName = "examplebucket-1250000000";
// 待删除目录的对象键,以 "/" 结尾
String key = "my-space/dir/";

DeleteObjectRecursiveRequest deleteObjectRecursiveRequest = new DeleteObjectRecursiveRequest(bucketName, key);

try {
DeleteObjectRecursiveResult deleteObjectRecursiveResult = cosClient.deleteObjectRecursive(deleteObjectRecursiveRequest);
List<String> deletedKeys = deleteObjectRecursiveResult.getDeletedKeys();
if (deleteObjectRecursiveResult.hasErrors()) {
// 部分对象删除失败
List<DeleteObjectRecursiveResult.DeleteError> deleteErrors = deleteObjectRecursiveResult.getErrors();
}
} catch (CosServiceException e) {
e.printStackTrace();
} catch (CosClientException e) {
e.printStackTrace();
}
// 确认本进程不再使用 cosClient 实例之后,关闭即可
cosClient.shutdown();

参数说明

参数名称
描述
类型
deleteObjectRecursiveRequest
递归删除请求
DeleteObjectRecursiveRequest
Request 成员说明:
参数名称
描述
类型
bucketName
Bucket 的命名格式为 BucketName-APPID ,详情请参见 命名规范
String
key
待删除的对象键。删除目录时以 / 结尾,例如 my-space/dir/;删除单个文件时传入文件的对象键。不能为空或 /
String

返回结果说明

成功:返回 DeleteObjectRecursiveResult。部分对象删除失败时,hasErrors() 返回 true,可通过 getErrors() 获取失败的对象列表。
失败:发生错误(如身份认证失败),抛出异常 CosClientException 或者 CosServiceException。详情请参见 异常处理。
DeleteObjectRecursiveResult 成员说明:
参数名称
描述
类型
deletedKeys
已删除的对象路径列表,通过 getDeletedKeys() 获取
List<String>
errors
删除失败的对象列表,元素类型为 DeleteObjectRecursiveResult.DeleteError,通过 getErrors() 获取
List<DeleteError>
DeleteError 成员说明:
参数名称
描述
类型
key
删除失败的对象路径
String
code
删除失败的对象对应的错误码
String
message
删除失败的对象对应的错误描述
String

API 操作

关于递归删除对象的 API 接口说明,请参见 Delete Object Recursive 文档。