如何使用PHP在S3 bucket中创建文件夹
我试图在S3Amazon bucket中创建一个文件夹,但我发现很难找到合适的文档来充分解释所需的内容。我有以下创建文件夹的代码/伪代码。有人能解释或提供我需要在代码中放置的参数的示例吗如何使用PHP在S3 bucket中创建文件夹,php,amazon-web-services,amazon-s3,create-directory,Php,Amazon Web Services,Amazon S3,Create Directory,我试图在S3Amazon bucket中创建一个文件夹,但我发现很难找到合适的文档来充分解释所需的内容。我有以下创建文件夹的代码/伪代码。有人能解释或提供我需要在代码中放置的参数的示例吗 use vendor\aws\S3\S3Client; $bucket_url = 'https://***.amazonaws.com/***/'; $folder_name = $username . '/'; $s3Client = new vendor\aws\S3\S3Client([
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' => "",
));
:
在AmazonS3中,bucket和对象是主要资源,对象存储在bucket中。AmazonS3有一个扁平的结构,没有像典型文件系统中那样的层次结构。然而,为了组织的简单性,AmazonS3控制台支持文件夹概念作为对象分组的一种方式。AmazonS3通过使用对象的键名前缀来实现这一点
相反,它根据对象键的名称来伪造它。只需使用像some/directory/file.txt
这样的键上传一个对象,许多工具,包括AWS控制台中的S3接口,就好像在名为some
的目录中名为directory
的目录中有一个名为file.txt
的对象一样
另请参见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/desired/folder/structure/file.txt”),AmazonS3将把它放在那里。与许多文件系统不同,在创建文件之前,文件夹必须存在
最接近“创建文件夹”的方法是创建一个0字节的对象,在其键的末尾有一个“/”。例如“my/desired/folder/structure/”。但它只是桶里的另一个物体。它不会对bucket或bucket中任何其他对象的创建或操作产生任何影响。“因此,解决方法将放置一个空的txt文件,并在wards之后将其删除,但文件夹结构将保留。”这不是真的。如果没有创建任何文件夹,则删除对象后将无法保留任何文件夹。@Matthouse在创建“/folder/test.txt”文件夹时将一个空的txt文件放入此处,删除“test.txt”时,文件夹将保留。这是PHP客户端
putObjectFile
方法的内置副作用吗?这不是AWS API的标准行为putObjectFile
是一种遗留方法。现代版本的PHPputObject
方法也会这样做吗?连接到S3 bucket所需的安全信息,仅仅是我通过控制台登录时使用的用户名和密码吗?医生对此不是很清楚。谢谢您的回答。@KPM您需要访问密钥和密钥,或者使用IAM角色(如果在EC2实例上运行):