веб-сервисы Amazon — Как создать папку в корзине S3 с помощью переполнения стека

Я пытаюсь создать папку в амазонке S3, но мне трудно найти нужную документацию, чтобы адекватно объяснить, что нужно. У меня есть следующий код / ​​псевдокод для создания папки. Может ли кто-нибудь объяснить или предоставить пример аргументов, которые мне нужно разместить в коде

use vendor\aws\S3\S3Client;

$bucket_url = 'https://***.amazonaws.com/***/';
$folder_name = $username . '/';

$s3Client = new vendor\aws\S3\S3Client([
'version' => AWS_VERSION,
'region' => AWS_REGION,
'credentials' => [
'key' => AWS_KEY,
'secret' =>AWS_SECRET,
],
]);

$s3Client->putObject(array(
'Bucket' => AWS_BUCKET, // Defines name of Bucket
'Key' => AWS_PATH . $folder_name, //Defines Folder name
'Body' => "",
));

0

Решение

S3 не имеет папок вне корзины, но объекты (файлы) могут иметь / s (прямая косая черта) в своем имени, и есть методы для извлечения на основе префикса, который позволяет вам эмулировать список каталогов. Это означает, что вы не можете создать пустую папку.

Таким образом, обходной путь будет помещать пустой текстовый файл и удалять его после защиты, но структура папок останется.

/* function to upload empty test.txt file to subfolders /folder/ on S3 bucketname */
$s3->putObjectFile(‘test.txt’, ‘bucketname’, ‘/folder/test.txt’, S3::ACL_PUBLIC_READ);

/* function to delete empty test.txt file to subfolders /folder/ on S3 bucketname */
$s3->deleteObject(‘bucketname’, ‘/folder/test.txt’);
3

Другие решения

Amazon S3 на самом деле не имеет каталогов:

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

Вместо этого он подделывает его на основе имени ключа объекта. Просто загрузите объект, используя ключ как some/directory/file.txt и многие инструменты, включая интерфейс S3 в консоли AWS, будут работать так, как будто у вас есть объект с именем file.txt в каталоге под названием directory в каталоге под названием some,

Смотрите также Amazon S3 boto — как создать папку?

4

Amazon S3 не имеет концепции папок. Для S3 все объекты — это просто имя ключа с данными.

Папки — это человеческое понятие, которое использует символ «/» для разделения папок. Но S3 не волнует.

Когда вы используете много сторонних инструментов (и даже Консоль управления AWS), эти инструменты часто проверяют ключи объектов под вашим префиксом, а когда они видят в нем символ ‘/’, они интерпретируют его как папку.

Но нет способа «создать папку».

Если ты, ты просто PutObject объект с ключом с желаемым полным путем (например, «my / требуемый / папка / structure / file.txt»), Amazon S3 поместит его туда. Это не похоже на многие файловые системы, где папка должна существовать, прежде чем файл может быть создан.

Самое близкое к «созданию папки», которую вы можете сделать, — это создать 0-байтовый объект с символом «/» в конце его ключа. Например «моя / желаемая / папка / структура /». Но это будет просто еще один объект в ведре. Это не повлияет на создание или работу корзины или любых других объектов в корзине.

4