Как удалить несколько объектов в корзине Amazon S3 с помощью Java V2
Итак, я хочу удалить все объекты, которые могут быть внутри папки в s3 (в основном с определенным префиксом).
Как мне это сделать? В настоящее время я использую этот цикл, но мне сказали, что это не очень хороший подход к использованию
Это то, что я использую прямо сейчас.
while (true) {
for (S3ObjectSummary objectSummary: objectListing.getObjectSummaries()) {
this.s3Client.deleteObject(bucketName, objectSummary.getKey());
}
if (objectListing.isTruncated()) {
objectListing = s3Client.listNextBatchOfObjects(objectListing);
} else {
break;
}
}
1 ответ
При использовании AWS SDK для клиента Java V2 S3 можно настроить код для использования списка объектов ObjectIdentifier для удаления. Добавьте новую запись в список для каждого удаляемого объекта. Укажите путь, по которому находится объект, в значении ключа ObjectIdentifier. Здесь вы указываете путь в корзине, где находится объект.
Вам нужно заполнить СПИСОК количеством объектов, которые вы хотите удалить. Итак, если у вас есть 20 объектов, вам нужно добавить 20 записей в список, каждая из которых имеет допустимое значение ключа, которое ссылается на удаляемый объект.
Затем вызовите deleteObjects() . Это более чистый способ удаления многих объектов. То есть вы можете удалить несколько объектов за 1 вызов против многих вызовов.
См. этот код.
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!");
}