amazonweb服务-如何使用PHP在S3 bucket中创建文件夹


amazon web services - How to create a folder within S3 bucket using PHP

我正试图在S3 amazon bucket中创建一个文件夹,但我发现很难找到合适的文档来充分解释需要什么。我有以下用于创建文件夹的代码/伪代码。有人能解释或提供我需要在代码中放置的论点的样本吗

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' => "",
    ));

S3在bucket之外没有文件夹,但对象(文件(的名称中可以有/s(正斜杠(,并且有一些方法可以基于前缀进行检索,从而可以模拟目录列表。这意味着你不能创建一个空文件夹。

因此,解决方案将放一个空的txt文件,并在病房后将其删除,但文件夹结构将保留。

/* 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’);

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

文件夹是一个人类概念,它使用"/"字符来分隔文件夹。但S3并不在乎。

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

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

如果你只是简单地PutObject一个对象,其中有一个带有你想要的完整路径的键(例如,"my/dequided/folder/structure/file.txt"(,AmazonS3会把它放在那里。与许多文件系统不同,在创建文件之前,文件夹必须存在。

你能做的最接近"创建文件夹"的事情是创建一个0字节的对象,在它的键末尾有一个"/"。例如"我的/想要的/文件夹/结构/"。但它将只是桶里的另一个物体。它不会对bucket或bucket中任何其他对象的创建或操作产生任何影响。

AmazonS3并没有真正的目录:

在AmazonS3中,bucket和object是主要资源,其中object存储在bucket中。AmazonS3有一个没有层次结构的扁平结构,就像你在典型的文件系统中看到的那样。然而,为了简化组织,AmazonS3控制台支持文件夹概念作为对对象进行分组的一种方式。AmazonS3通过为对象使用密钥名称前缀来实现这一点。

相反,它会根据对象键的名称来伪造它。只需使用像some/directory/file.txt这样的键和许多工具(包括AWS控制台中的S3接口(上传一个对象,就好像在some目录中的directory目录中有一个名为file.txt的对象一样。

另请参阅AmazonS3僵尸程序-如何创建文件夹?

$client->putObject([
  'Bucket' => 'bucket',
  'Key' => 'folder/', ]);

对于"版本"=>'2006-03-01',