如何使用JavaV2删除AmazonS3存储桶中的多个对象



所以我想删除s3中文件夹中的所有对象(基本上带有特定前缀(
我该怎么做?我目前正在使用这个while (true)循环,但我被告知使用while (true)不是一个好方法
这就是我现在使用的。

while (true) {
for (S3ObjectSummary objectSummary: objectListing.getObjectSummaries()) {
this.s3Client.deleteObject(bucketName, objectSummary.getKey());
}
if (objectListing.isTruncated()) {
objectListing = s3Client.listNextBatchOfObjects(objectListing);
} else {
break;
}
}

当使用AWS SDK for Java V2S3客户端时,您可以将代码设置为使用要删除的ObjectIdentifier对象列表。为要删除的每个对象向列表中添加一个新条目。在ObjectIdentifier键值中指定对象所在的路径。这是在bucket中指定对象所在的路径的位置。

您需要用要删除的对象数填充LIST。因此,如果您有20个对象,那么您需要向列表中添加20个条目,每个条目都有一个引用要删除的对象的有效键值。

然后调用deleteObjects((。这是删除许多对象的更干净的方法。也就是说,您可以在一次调用中删除多个对象,而不是多次调用。

请参阅此代码。

public static void deleteBucketObjects(S3Client s3, String bucketName, String objectName) {
ArrayList<ObjectIdentifier> toDelete = new ArrayList<>();
toDelete.add(ObjectIdentifier.builder()
.key(objectName)
.build());
try {
DeleteObjectsRequest dor = DeleteObjectsRequest.builder()
.bucket(bucketName)
.delete(Delete.builder()
.objects(toDelete).build())
.build();

s3.deleteObjects(dor);
} catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}

System.out.println("Done!");
}

最新更新