删除对象

最近更新时间:2024-08-15 11:42:31

我的收藏

简介

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

注意事项

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

相关示例

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

前期准备

创建 CosXmlService

调用 COS 的接口之前,必须先创建一个 CosXmlService 的实例,详细代码可以参见 创建 CosXmlService

使用案例

删除单个对象

删除指定的对象(DELETE Object)。
String bucket = "examplebucket-1250000000"; //存储桶名称,格式:BucketName-APPID
String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即对象键

DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucket,
cosPath);
cosXmlService.deleteObjectAsync(deleteObjectRequest,
new CosXmlResultListener() {
@Override
public void onSuccess(CosXmlRequest cosXmlRequest, CosXmlResult result) {
DeleteObjectResult deleteObjectResult = (DeleteObjectResult) result;
}

// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:
// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?
@Override
public void onFail(CosXmlRequest cosXmlRequest,
@Nullable CosXmlClientException clientException,
@Nullable CosXmlServiceException serviceException) {
if (clientException != null) {
clientException.printStackTrace();
} else {
serviceException.printStackTrace();
}
}
});

删除多个对象

批量删除多个对象(Delete Multi Objects)。
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
String bucket = "examplebucket-1250000000";
List<String> objectList = new ArrayList<String>();
objectList.add("exampleobject1"); //对象在存储桶中的位置标识符,即对象键
objectList.add("exampleobject2"); //对象在存储桶中的位置标识符,即对象键

DeleteMultiObjectRequest deleteMultiObjectRequest =
new DeleteMultiObjectRequest(bucket, objectList);
// Quiet 模式只返回报错的 Object 信息。否则返回每个 Object 的删除结果。
deleteMultiObjectRequest.setQuiet(true);
cosXmlService.deleteMultiObjectAsync(deleteMultiObjectRequest,
new CosXmlResultListener() {
@Override
public void onSuccess(CosXmlRequest cosXmlRequest, CosXmlResult result) {
DeleteMultiObjectResult deleteMultiObjectResult =
(DeleteMultiObjectResult) result;
}

// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:
// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?
@Override
public void onFail(CosXmlRequest cosXmlRequest,
@Nullable CosXmlClientException clientException,
@Nullable CosXmlServiceException serviceException) {
if (clientException != null) {
clientException.printStackTrace();
} else {
serviceException.printStackTrace();
}
}
});

删除目录

COS 上的文件夹概念是以 / 分隔对象名,形成类似文件系统的路径,从而模拟出来的。所以删除文件夹的操作,在 COS 上相当于删除一批有着同样前缀的对象。例如:文件夹 prefix/ ,代表的是以 prefix/ 为前缀的所有对象,所以删除 prefix/ 意味着删除以 prefix/ 为前缀的所有对象。
目前 COS Android SDK 没有提供一个接口去支持这样的操作,但是可以通过基本操作的组合,达到同样的效果。
// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.cloud.tencent.com/cos5/bucket
String bucket = "examplebucket-1250000000";
String prefix = "folder1/"; //指定前缀

GetBucketRequest getBucketRequest = new GetBucketRequest(bucket);
// prefix 表示要删除的文件夹
getBucketRequest.setPrefix(prefix);
// 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
getBucketRequest.setMaxKeys(1000);
GetBucketResult getBucketResult = null;

do {
try {
getBucketResult = cosXmlService.getBucket(getBucketRequest);
List<ListBucket.Contents> contents = getBucketResult.listBucket.contentsList;
DeleteMultiObjectRequest deleteMultiObjectRequest = new DeleteMultiObjectRequest(bucket);
for (ListBucket.Contents content : contents) {
deleteMultiObjectRequest.setObjectList(content.key);
}
cosXmlService.deleteMultiObject(deleteMultiObjectRequest);
getBucketRequest.setMarker(getBucketResult.listBucket.nextMarker);
} catch (CosXmlClientException e) {
e.printStackTrace();
return;
} catch (CosXmlServiceException e) {
e.printStackTrace();
return;
}
} while (getBucketResult.listBucket.isTruncated);

SDK API 参考

SDK 所有接口的具体参数与方法说明,请参考 SDK API 参考

API 操作

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