Как удалить несколько объектов в корзине 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!");
    }
Другие вопросы по тегам