Mun*_*man 5 java amazon-s3 amazon-web-services aws-sdk-java-2.0
是否可以使用java sdk为aws删除文件夹(在S3存储桶中)及其所有内容的单个api请求.对于浏览器控制台,我们只需单击即可删除文件夹及其内容,我希望使用API也可以使用相同的行为.
KES*_*MAR 10
java sdk 中没有提供文件夹名称或更具体的前缀来删除文件的选项。但是可以选择提供要删除的键数组。 点击查看更多细节 。通过使用这个,我编写了一个小方法来删除与某个前缀对应的所有文件。
private AmazonS3 s3client = <Your s3 client>;
private String bucketName = <your bucket name, can be signed or unsigned>;
public void deleteDirectory(String prefix) {
ObjectListing objectList = this.s3client.listObjects( this.bucketName, prefix );
List<S3ObjectSummary> objectSummeryList = objectList.getObjectSummaries();
String[] keysList = new String[ objectSummeryList.size() ];
int count = 0;
for( S3ObjectSummary summery : objectSummeryList ) {
keysList[count++] = summery.getKey();
}
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest( bucketName ).withKeys( keysList );
this.s3client.deleteObjects(deleteObjectsRequest);
}
Run Code Online (Sandbox Code Playgroud)
S3中没有文件夹。文件名中仅包含带斜杠的文件。
浏览器控制台会将这些斜线可视化为文件夹,但不是真实的。
您可以删除具有相同前缀的所有文件,但首先需要使用list_objects()查找它们,然后可以批量删除它们。
有关使用Java SDK的代码段,请参阅以下文档
http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingJava.html
您可以在ListObjectsRequest中指定keyPrefix。
例如,考虑一个包含以下键的存储桶:
而且您想从foo / bar / baz删除文件。
if (s3Client.doesBucketExist(bucketName)) {
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName)
.withPrefix("foo/bar/baz");
ObjectListing objectListing = s3Client.listObjects(listObjectsRequest);
while (true) {
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
s3Client.deleteObject(bucketName, objectSummary.getKey());
}
if (objectListing.isTruncated()) {
objectListing = s3Client.listNextBatchOfObjects(objectListing);
} else {
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8503 次 |
最近记录: |