AWS S3 — Указанный ключ не существует. — для загруженных папок

#amazon-web-services #object #amazon-s3 #directory #sdk

#amazon-веб-сервисы #объект #amazon-s3 #каталог #sdk

Вопрос:

Когда я загружаю папку в корзину S3 (перетаскиванием), я вижу, что она не рассматривается как объект — я не могу получить ее с помощью своего ключа (GetObjectAsync()), и ListObjectsV2Async() не возвращает ее (я использую .net sdk). Когда я создаю папку под корзиной, я могу получить ее, и она появляется в списке объектов корзины. В чем причина этого?

Ответ №1:

В Amazon S3 нет понятия «Каталог» или «Папка».

Вместо этого в его ключе (имени файла) сохраняется полный путь к объекту.

Например, объект может храниться в Amazon S3 с ключом: invoices/2020-09/inv22.txt

Этот объект может быть создан, даже если каталоги invoices и 2020-09 не существуют. При просмотре через консоль Amazon S3 будет отображаться так, как будто эти каталоги были созданы автоматически, но если объект будет удален, эти каталоги исчезнут (потому что они никогда не существовали).

Если пользователь нажимает кнопку «Создать папку» в консоли управления Amazon S3, создается объект нулевой длины с тем же именем, что и у папки. Это «заставляет» папку отображаться, даже если внутри папки нет объектов. Однако на самом деле это не папка.

При использовании ListObjects команды при указании разделителя / возвращается список CommonPrefixes . Это эквивалентно тому, что вы обычно рассматриваете как подкаталог.