Я использую AWS SDK v2 для S3 software.amazon.awssdk.s3
. У меня есть ведро, и я перечисляю ключи для извлечения объектов. Я ожидаю перечислить ключи объекта и получить что-то вроде этого:
...
ACTIVE/somefile.jpg
ACTIVE/someotherfile.jpg
...
Однако процесс листинга также вернет корневой ключ, так сказать
ACTIVE/
Когда я запускаю 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 ответ
Вам нужно будет использовать атрибут prefix
для фильтрации "папок" в вашем примере. Что-то такое :
ListObjectsV2Request.builder()
.bucket("your-bucket")
.prefix("ACTIVE/")
.build();
И помните, что даже если в консоли можно создать "папку", за кадром ее нет. Это просто объект, который хранит AWS. Вот почему в SDK нет встроенной опции для создания/списка/любых папок.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.