Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP在S3 bucket中创建文件夹_Php_Amazon Web Services_Amazon S3_Create Directory - Fatal编程技术网

如何使用PHP在S3 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([

我试图在S3Amazon 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' => "",
    ));
:

在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
是一种遗留方法。现代版本的PHP
putObject
方法也会这样做吗?连接到S3 bucket所需的安全信息,仅仅是我通过控制台登录时使用的用户名和密码吗?医生对此不是很清楚。谢谢您的回答。@KPM您需要访问密钥和密钥,或者使用IAM角色(如果在EC2实例上运行):