如何使用 PHP 在 S3 存储桶中创建文件夹

KPM*_*KPM 2 php amazon-s3 amazon-web-services create-directory

我正在尝试在 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' => "",
    ));
Run Code Online (Sandbox Code Playgroud)

err*_*07s 5

S3 没有存储桶以外的文件夹,但对象(文件)的名称中可以包含 /s(正斜杠),并且有一些方法可以根据允许您模拟目录列表的前缀进行检索。但是,这意味着您不能创建空文件夹。

因此,解决方法是放置一个空的 txt 文件并在 wards 之后将其删除,但文件夹结构将保留。

/* 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’);
Run Code Online (Sandbox Code Playgroud)

  • “因此,解决方法是将一个空的 txt 文件放入一个空的 txt 文件并在病房之后将其删除,但文件夹结构将保留。” 这不是真的。如果没有创建文件夹,则在删除对象后没有文件夹可以保留。 (2认同)

Mat*_*ser 5

Amazon S3 没有文件夹的概念。对于 S3,所有对象都只是一个带有数据的键名。

文件夹是人类的概念,它使用“/”字符来分隔文件夹。但 S3 不在乎。

当您使用许多第三方工具(甚至 AWS 管理控制台)时,这些工具通常会查看您前缀下的对象键,当它看到其中的“/”时,它会将其解释为文件夹。

但是没有办法“创建文件夹”。

如果您只是PutObject一个带有所需完整路径的键的对象(例如,“my/desired/folder/structure/file.txt”),Amazon S3 会将它放在那里。与许多文件系统不同,在创建文件之前文件夹必须存在。

您可以做的最接近“创建文件夹”的方法是创建一个 0 字节的对象,并在其键的末尾添加一个 '/'。例如“我的/期望的/文件夹/结构/”。但它只是桶中的另一个对象。它不会对存储桶或存储桶中任何其他对象的创建或操作产生任何影响。