tencent cloud

文档反馈

删除对象

最后更新时间:2024-01-19 15:33:39

    简介

    本文档提供关于对象的删除操作相关的 API 概览以及 SDK 示例代码。
    API
    操作名
    操作描述
    删除单个对象
    在存储桶中删除指定对象
    删除多个对象
    在存储桶中批量删除对象

    简单操作

    简单操作由 COSClient 类型发起请求,使用简单操作之前必须先创建一个 COSClient 实例。
    COSClient 实例是并发安全的,这里推荐一个进程只创建一个 COSClient 实例,当不会再通过这个实例发起请求的时候,再选择关闭这个实例。

    创建 COSClient

    调用 COS 的接口之前,必须先创建一个 COSClient 的实例。
    // 创建 COSClient 实例,这个实例用来后续调用请求
    COSClient createCOSClient() {
    // 设置用户身份信息。
    // SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.tencentcloud.com/cam/capi 进行查看和管理
    String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
    String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1
    COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
    
    // ClientConfig 中包含了后续请求 COS 的客户端设置:
    ClientConfig clientConfig = new ClientConfig();
    
    // 设置 bucket 的地域
    // COS_REGION 请参见 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1
    clientConfig.setRegion(new Region("COS_REGION"));
    
    // 设置请求协议, http 或者 https
    // 5.6.53 及更低的版本,建议设置使用 https 协议
    // 5.6.54 及更高版本,默认使用了 https
    clientConfig.setHttpProtocol(HttpProtocol.https);
    
    // 以下的设置,是可选的:
    
    // 设置 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。 本 SDK 并不能生成临时密钥,而需要使用额外的操作来生成,详情请参见 临时密钥生成
    
    // 创建 COSClient 实例,这个实例用来后续调用请求
    COSClient createCOSClient() {
    // 这里需要已经获取到临时密钥的结果。
    // 临时密钥的生成参见 https://www.tencentcloud.com/document/product/436/14048
    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://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1
    clientConfig.setRegion(new Region("COS_REGION"));
    
    // 设置请求协议, http 或者 https
    // 5.6.53 及更低的版本,建议设置使用 https 协议
    // 5.6.54 及更高版本,默认使用了 https
    clientConfig.setHttpProtocol(HttpProtocol.https);
    
    // 以下的设置,是可选的:
    
    // 设置 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);
    }

    删除对象

    删除指定的对象(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://www.tencentcloud.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", "aaa versionId"));
    keyList.add(new KeyVersion("bbb", "bbb versionId"));
    keyList.add(new KeyVersion("ccc", "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,详情请参见 异常处理

    删除目录

    删除目录操作包括两个步骤:列出要删除的目录下的所有对象,使用批量删除对象。
    // 列目录实现参考:列出对象 -> 简单操作 -> 列出目录下的对象和子目录
    // 批量删除实现参考本页:批量删除对象
    
    // 调用 COS 接口之前必须保证本进程存在一个 COSClient 实例,如果没有则创建
    // 详细代码参见本页:简单操作 -> 创建 COSClient
    COSClient cosClient = createCOSClient();
    
    // 存储桶的命名格式为 BucketName-APPID,此处填写的存储桶名称必须为此格式
    String bucketName = "examplebucket-1250000000";
    
    // 要删除的目录,这里是相对于 bucket 的路径
    String delDir = "exampledir";
    
    ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
    // 设置 bucket 名称
    listObjectsRequest.setBucketName(bucketName);
    // prefix 表示列出的对象名以 prefix 为前缀
    // 这里填要列出的目录的相对 bucket 的路径
    listObjectsRequest.setPrefix(delDir);
    // 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
    listObjectsRequest.setMaxKeys(1000);
    
    // 保存每次列出的结果
    ObjectListing objectListing = null;
    
    do {
    try {
    objectListing = cosClient.listObjects(listObjectsRequest);
    } catch (CosServiceException e) {
    e.printStackTrace();
    return;
    } catch (CosClientException e) {
    e.printStackTrace();
    return;
    }
    
    // 这里保存列出的对象列表
    List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();
    
    ArrayList<KeyVersion> delObjects = new ArrayList<KeyVersion>();
    
    for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
    delObjects.add(new KeyVersion(cosObjectSummary.getKey()));
    }
    
    DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName);
    
    deleteObjectsRequest.setKeys(delObjects);
    
    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();
    return;
    } catch (CosClientException e) {
    e.printStackTrace();
    return;
    }
    
    // 标记下一次开始的位置
    String nextMarker = objectListing.getNextMarker();
    listObjectsRequest.setMarker(nextMarker);
    } while (objectListing.isTruncated());
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持