您可以根据需要删除单个文件(Object)、删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。

警告 请您谨慎使用删除操作,文件删除后将无法恢复。

删除单个文件

以下代码用于删除examplebucket中的exampleobject.txt文件。

// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称。
String bucketName = "examplebucket";
// 填写文件完整路径。文件完整路径中不能包含Bucket名称。
String objectName = "exampleobject.txt";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 删除文件或目录。如果要删除目录,目录必须为空。
ossClient.deleteObject(bucketName, objectName);

// 关闭OSSClient。
ossClient.shutdown();

批量删除文件

批量删除文件时,每次最多删除1000个文件。您可以删除指定的多个文件、删除指定前缀的文件或者删除指定目录及目录下的所有文件。

OSS还支持通过设置生命周期规则来自动删除文件。更多信息,请参见开发指南中的生命周期规则介绍

  • 参数说明
    请求中的参数说明请参见下表。
    参数 描述 方法
    Keys 需要删除的文件。 setKeys(List<String>)
    quiet 返回结果包括如下两种模式,默认返回模式为详细模式,请根据实际选择返回模式。
    • 详细模式(verbose):未设置quiet或者设置quiet为false,表示返回所有删除的文件列表。
    • 简单模式(quiet):设置quiet为true,表示只返回删除失败的文件列表。
    setQuiet(boolean)
    encodingType 对返回的文件名称进行编码。编码类型目前仅支持url。 setEncodingType(String)
    返回结果中的参数说明请参见下表。
    参数 描述 方法
    deletedObjects 删除结果。详细模式下为删除成功的文件列表,简单模式下为删除失败的文件列表。 List<String> getDeletedObjects()
    encodingType deletedObjects中文件名称的编码,返回为空表示没有编码。 getEncodingType()
  • 示例
    • 删除指定的多个文件
      以下代码用于删除examplebucket中指定的多个文件。
      // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
      String endpoint = "yourEndpoint";
      // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
      String accessKeyId = "yourAccessKeyId";
      String accessKeySecret = "yourAccessKeySecret";
      // 填写Bucket名称。
      String bucketName = "examplebucket";
      
      // 创建OSSClient实例。
      OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
      // 删除文件。
      // 填写需要删除的多个文件完整路径。文件完整路径中不能包含Bucket名称。
      List<String> keys = new ArrayList<String>();
      keys.add("exampleobjecta.txt");
      keys.add("testfolder/sampleobject.txt");
      keys.add("exampleobjectb.txt");
      
      DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType(URL_ENCODING));
      List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
      try {
          for(String obj : deletedObjects) {
              String deleteObj =  URLDecoder.decode(obj, "UTF-8");
              System.out.println(deleteObj);
          }
      } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
      }
      // 关闭OSSClient。
      ossClient.shutdown();
    • 删除指定前缀(prefix)的文件

      以下代码用于删除examplebucket中以file为前缀的文件。

      // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
      String endpoint = "yourEndpoint";
      // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
      String accessKeyId = "yourAccessKeyId";
      String accessKeySecret = "yourAccessKeySecret";
      // 填写Bucket名称。
      String bucketName = "examplebucket";
      
      // 指定前缀。
      final String prefix = "file";
      
      // 创建OSSClient实例。
      OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
      // 列举所有包含指定前缀的文件并删除。
      String nextMarker = null;
      ObjectListing objectListing = null;
      do {
          ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName)
                  .withPrefix(prefix)
                  .withMarker(nextMarker);
      
          objectListing = ossClient.listObjects(listObjectsRequest);
          if (objectListing.getObjectSummaries().size() > 0) {
              List<String> keys = new ArrayList<String>();
              for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
                  System.out.println("key name: " + s.getKey());
                  keys.add(s.getKey());
              }
              DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType(URL_ENCODING);
              DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest); 
              List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
              try {
                  for(String obj : deletedObjects) {
                      String deleteObj =  URLDecoder.decode(obj, "UTF-8");
                      System.out.println(deleteObj);
                  }
              } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
              }
          } 
      
          nextMarker = objectListing.getNextMarker();
      } while (objectListing.isTruncated());
      
      // 关闭OSSClient。
      ossClient.shutdown();
    • 删除指定目录及目录下的所有文件

      以下代码用于删除examplebucket中testdir目录及目录下的所有文件。

      // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
      String endpoint = "yourEndpoint";
      // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
      String accessKeyId = "yourAccessKeyId";
      String accessKeySecret = "yourAccessKeySecret";
      // 填写Bucket名称。
      String bucketName = "examplebucket";
      
      
      // 填写不包含Bucket名称在内的目录完整路径。例如Bucket下testdir目录的完整路径为testdir/。
      final String prefix = "testdir/";
      
      // 创建OSSClient实例。
      OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
      
      // 删除目录及目录下的所有文件。
      String nextMarker = null;
      ObjectListing objectListing = null;
      do {
          ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName)
                  .withPrefix(prefix)
                  .withMarker(nextMarker);
      
          objectListing = ossClient.listObjects(listObjectsRequest);
          if (objectListing.getObjectSummaries().size() > 0) {
              List<String> keys = new ArrayList<String>();
              for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
                  System.out.println("key name: " + s.getKey());
                  keys.add(s.getKey());
              }
              DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType(URL_ENCODING);
              DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest);
              List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
              try {
                  for(String obj : deletedObjects) {
                      String deleteObj =  URLDecoder.decode(obj, "UTF-8");
                      System.out.println(deleteObj);
                  }
              } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
              }
          }
      
          nextMarker = objectListing.getNextMarker();
      } while (objectListing.isTruncated());
      
      // 关闭OSSClient。
      ossClient.shutdown();

批量删除文件的完整代码请参见GitHub