API листинга AWS S3 - Как составить список всего внутри S3 Bucket с определенным префиксом - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь перечислить все элементы с определенным prefix в корзине S3. Вот структура каталогов, которая у меня есть:

Item1/
     Item2/
          Item3/
               Item4/
                     image_1.jpg
               Item5/
                     image_1.jpg
                     image_2.jpg

Когда я устанавливаю prefex равным Item1/Item2, я получаю в результате следующие ключи:

Item1/Item2/
Item1/Item2/Item3/Item4/image_1.jpg
Item1/Item2/Item3/Item5/image_1.jpg
Item1/Item2/Item3/Item5/image_2.jpg

Я бы хотел получить:

Item1/Item2/
Item1/Item2/Item3
Item1/Item2/Item3/Item4
Item1/Item2/Item3/Item5
Item1/Item2/Item3/Item4/image_1.jpg
Item1/Item2/Item3/Item5/image_1.jpg
Item1/Item2/Item3/Item5/image_2.jpg

Есть ли способ достичь этого на Голанге?

1 Ответ

3 голосов
/ 13 июня 2019

Папки на самом деле не существуют в Amazon S3.Это система хранения плоских объектов.

Например, используя Интерфейс командной строки AWS (CLI) Я мог бы скопировать команду в корзину Amazon S3:

aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt

Это прекрасно работает, хотя folder1 и folder2 не существует.Это связано с тем, что объекты хранятся с Key (имя файла), которое включает полный путь к объекту .Таким образом, вышеупомянутый объект на самом деле имеет ключ (имя файла):

folder1/folder2/foo.txt

Однако, чтобы упростить жизнь людям, консоль управления Amazon S3 делает его видимым , как будто естьпапки.В S3 они называются Общими префиксами , а не папками.

Итак, когда вы делаете вызов API, чтобы вывести список содержимого при указании Prefix, он просто говорит "Перечислите все объекты, ключ которых начинается с этой строки ".

В вашем списке нет папок, потому что они на самом деле не существуют.

Теперь, просто чтобы противоречить самому себе, на самом деле Можно создать папку (например, нажав Создать папку в консоли управления).Это на самом деле создает объект нулевой длины с тем же именем, что и папка .После этого папка появится в списках, поскольку на самом деле она содержит объект нулевой длины, а не папку.

Вероятно, поэтому в вашем списке появляется Item1/Item2/, а Item1/Item2/Item3 - нет.Кто-то на каком-то этапе должен был «создать папку» с именем Item1/Item2/, которая фактически создала объект нулевой длины с этим ключом.

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