Java AWS SDK v2: список ключей корзины, но только файлов - PullRequest
0 голосов
/ 25 апреля 2020

Я использую AWS SDK v2 для S3 software.amazon.awssdk.s3. У меня есть ведро, и я перечисляю ключи для получения объектов. Я ожидаю перечислить ключи объекта и получить что-то вроде этого:

...
ACTIVE/somefile.jpg
ACTIVE/someotherfile.jpg
...

Однако процесс листинга также вернет ключ root, так сказать,

ACTIVE/

Когда я go запускаю GetOjbectRequest для ключа ACTIVE/, выдается ошибка, потому что вы не можете получить это. Итак, как мне перейти к моему запросу, чтобы я либо только перечислял ключи реальных объектов, либо фильтровал свой ответ так, чтобы у меня были только фактические объекты до GetOjbectRequest -из них?

Мой код в настоящее время выглядит так следующее:

List<String> activeRuleKeys = listObjectsV2Responses.stream()
            .map(listObjectsV2Response -> listObjectsV2Response.contents())
            .flatMap(s3Objects -> s3Objects.stream())
            .map(s3Object -> s3Object.key())
            .collect(Collectors.toList());

// Error happens below
List<String> ruleSet = activeRuleKeys.stream().map(s -> {
        GetObjectRequest build = GetObjectRequest.builder().bucket(bucketName).key(s).build();
        String ruleString = this.s3Client.getObject(build, ResponseTransformer.toBytes()).asUtf8String();
        return ruleString;
    }).collect(Collectors.toList());

Любая помощь с благодарностью

1 Ответ

0 голосов
/ 25 апреля 2020

Вам потребуется использовать атрибут prefix, чтобы отфильтровать «папки» в вашем примере. Примерно так:

ListObjectsV2Request.builder()
  .bucket("your-bucket")
  .prefix("ACTIVE/")
  .build();

И помните, что даже если в консоли вы можете создать «папку», за кадром ее нет. Это просто объект, который AWS хранит. Вот почему в SDK нет встроенной опции для создания / списка / любых папок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...