控制台指南

最佳实践

开发者指南

API 文档

SDK 文档

删除对象

最近更新时间:2021-05-10 09:06:11

简介

本文档提供关于对象的删除操作相关的 API 概览以及 SDK 示例代码。

API 操作名 操作描述
DELETE Object 删除单个对象 在存储桶中删除指定对象
DELETE Multiple Objects 删除多个对象 在存储桶中批量删除对象

SDK API 参考

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

删除单个对象

功能说明

删除指定的对象(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;
   }
    @Override
   public void onFail(CosXmlRequest cosXmlRequest,
                      CosXmlClientException clientException,
                      CosXmlServiceException serviceException) {
       if (clientException != null) {
           clientException.printStackTrace();
       } else {
           serviceException.printStackTrace();
       }
   }
});
说明:

更多完整示例,请前往 GitHub 查看。

删除多个对象

功能说明

批量删除多个对象(Delete Multi Objects)。

示例代码

String bucket = "examplebucket-1250000000"; //存储桶,格式:BucketName-APPID
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;
   }
    @Override
   public void onFail(CosXmlRequest cosXmlRequest,
                      CosXmlClientException clientException,
                      CosXmlServiceException serviceException) {
       if (clientException != null) {
           clientException.printStackTrace();
       } else {
           serviceException.printStackTrace();
       }
   }
});

删除目录

功能说明

COS 上的文件夹概念是以 '/' 分隔对象名,形成类似文件系统的路径,从而模拟出来的。所以删除文件夹的操作,在 COS 上相当于删除一批有着同样前缀的对象。例如:文件夹 'prefix/' ,代表的是以 'prefix/' 为前缀的所有对象,所以删除 'prefix/' 意味着删除以 'prefix/' 为前缀的所有对象。

目前 COS Android SDK 没有提供一个接口去支持这样的操作,但是可以通过基本操作的组合,达到同样的效果。

示例代码

// 删除 parent/directory/ 目录
String directory = "parent/directory/";
GetBucketRequest getBucketRequest = new GetBucketRequest(bucket);
getBucketRequest.setPrefix(directory);
// prefix表示要删除的文件夹
getBucketRequest.setPrefix(directory);
// 设置最大遍历出多少个对象, 一次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);
说明:

更多完整示例,请前往 GitHub 查看。

目录