Мне нужно указать все файлы, содержащиеся в определенной папке, содержащейся в моем ведре S3.Листинг файлов в определенной «папке» ведра AWS S3
структура Папки следующей
/my-bucket/users/<user-id>/contacts/<contact-id>
У меня есть файлы, связанные с пользователями и файлами, имеющими отношение к контакту какого-либо пользователя. Мне нужно перечислить оба.
Чтобы просмотреть список файлов я использую этот код:
ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName("my-bucket")
.withPrefix("some-prefix").withDelimiter("/");
ObjectListing objects = transferManager.getAmazonS3Client().listObjects(listObjectsRequest);
список файлов определенного пользователя, я буду использовать этот префикс:
users/<user-id>/
и я правильно получать все файлов в каталоге, за исключением contacts
, например:
users/<user-id>/file1.txt
users/<user-id>/file2.txt
users/<user-id>/file3.txt
Чтобы просмотреть список файлов определенного пользователя о контакте вместо Я использую этот префикс:
users/<user-id>/contacts/<contact-id>/
, но в этом случае я получаю также сам каталог в качестве возвращаемого объекта:
users/<user-id>/contacts/<contact-id>/file1.txt
users/<user-id>/contacts/<contact-id>/file2.txt
users/<user-id>/contacts/<contact-id>/
Почему я получаю такое поведение? Чем отличается между двумя запросами на листинг? Мне нужно указать только файлы в каталоге, исключая подкаталоги.
Такое поведение можно было бы ожидать, если вы на самом деле создали «пустую папку» в консоли, потому что действие фактически создает пустой объект с ключом 'путь/к/my/folder/', поэтому консоль имеет местозаполнитель. Вы это делали, проверяя? –
@ Michael-sqlbot Я не создал пустую папку. Infact все файлы загружаются приложением, используя структуру папок, которую я сообщил как префикс для ключа файла. – davioooh
Возможно, вы захотите попробовать «GET» на кажущемся объекте с завершающим косой чертой, потому что, если вы не создали папку, и вы использовали разделитель '/' 'withDelimiter ("/")' при перечислении объектов , это должно означать, что на самом деле у вас есть объект с именем с конечной косой чертой, возможно, из-за ошибки в вашем коде, который был создан таким образом. Такой объект, вероятно, будет невидим в консоли. –