AWS SDK для Java версии 2 - удаление «папки» S3 или удаление нескольких объектов S3 - PullRequest
0 голосов
/ 02 марта 2020

Я ищу, как удалить папку S3 , используя AWS SDK для Java версии 2. Мне удалось найти только AWS SDK версии 1 примеров.

Я знаю, что S3 является хранилищем объектов и что концепция папка не существует. Я имею в виду следующее:

  • Список объектов S3 данного сегмента с заданным префиксом
  • Удалите возвращенные объекты с помощью DeleteObjectsRequest, чтобы иметь возможность удалить до 1000 объекты в одном HTTP-вызове к AWS API

Когда я ищу примеры, я постоянно go возвращаюсь на эту страницу: https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingJava.html там, где это кажется является версией 1 AWS SDK для Java, которая используется. По крайней мере, со своей стороны, я импортировал AWS SDK 2 и не могу напрямую создать экземпляр DeleteObjectsRequest , как показано в этом примере. Я вынужден использовать компоновщики, тогда я не нахожу те же самые методы, чтобы указать список ключей, которые нужно удалить.

1 Ответ

0 голосов
/ 02 марта 2020

Мне удалось заставить его работать с фрагментом кода ниже.

Но я считаю этот способ довольно громоздким, и я все же хотел бы проверить в сообществе, является ли это правильным способом. Особенно я нахожу довольно громоздкой необходимость go из коллекции S3Object в коллекцию ObjectIdentifier и цепочки необходимых строителей. Почему построитель DeleteObjectsRequest не позволяет просто указать набор строк, являющихся ключами удаляемых объектов?

public static void deleteS3Objects(String bucket, String prefix) {
    ListObjectsV2Request request = ListObjectsV2Request.builder().bucket(bucket).prefix(prefix).build();
    ListObjectsV2Iterable list = s3Client.listObjectsV2Paginator(request);
    for (ListObjectsV2Response response : list) {
        List<S3Object> objects = response.contents();
        List<ObjectIdentifier> objectIdentifiers = objects.stream().map(o -> ObjectIdentifier.builder().key(o.key()).build()).collect(Collectors.toList());
        DeleteObjectsRequest deleteObjectsRequest = DeleteObjectsRequest.builder().bucket(bucket).delete(Delete.builder().objects(objectIdentifiers).build()).build();
        s3Client.deleteObjects(deleteObjectsRequest);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...