Как создать папку в S3 Bucket с помощью PHP
Я пытаюсь создать папку в амазонке 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' => "",
));
4 ответа
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’);
Amazon S3 не имеет концепции папок. Для S3 все объекты - это просто имя ключа с данными.
Папки - это человеческое понятие, которое использует символ "/" для разделения папок. Но S3 не волнует.
Когда вы используете много сторонних инструментов (и даже Консоль управления AWS), эти инструменты часто проверяют ключи объекта под вашим префиксом, а когда они видят в нем символ '/', они интерпретируют его как папку.
Но нет способа "создать папку".
Если ты, ты просто PutObject
объект с ключом с желаемым полным путем (например, "my/ требуемый / папка / структура / файл.txt"), Amazon S3 поместит его туда. Это не похоже на многие файловые системы, где папка должна существовать, прежде чем файл может быть создан.
Самое близкое к "созданию папки", которую вы могли бы сделать, - это создать 0-байтовый объект с символом "/" в конце его ключа. Например "моя / желаемая / папка / структура /". Но это будет просто еще один объект в ведре. Это не повлияет на создание или работу корзины или других объектов в корзине.
Amazon S3 на самом деле не имеет каталогов:
В Amazon S3 корзины и объекты являются основными ресурсами, где объекты хранятся в контейнерах. Amazon S3 имеет плоскую структуру без иерархии, как вы видели бы в типичной файловой системе. Однако в целях организационной простоты консоль Amazon S3 поддерживает концепцию папок как средство группировки объектов. Amazon S3 делает это с помощью префиксов имен ключей для объектов.
Вместо этого он подделывает его на основе имени ключа объекта. Просто загрузите объект, используя ключ как some/directory/file.txt
и многие инструменты, включая интерфейс S3 в консоли AWS, будут работать так, как будто у вас есть объект с именем file.txt
в каталоге под названием directory
в каталоге под названием some
,
Смотрите также Amazon S3 boto - как создать папку?
$client->putObject([
'Bucket' => 'bucket',
'Key' => 'folder/', ]);
Для 'version' => '2006-03-01',