您可以根据需要删除单个文件(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。