使用php使AWS s3目录公开

时间:2016-02-10 22:20:38

标签: php amazon-web-services amazon-s3

我知道S3中没有文件夹的概念,它使用平面文件结构。但是,为了简单起见,我将使用术语“文件夹”。

先决条件:

  • 一个名为foo的s3桶
  • 文件夹foo已使用AWS管理控制台
  • 公开
  • 的Apache
  • PHP 5
  • 标准AWS SDK

问题:

可以使用AWS PHP SDK上传文件夹。但是,该文件夹只能由上传文件夹的用户访问,而不是像我希望的那样是公共可读的。

步骤:

$sharedConfig = [
    'region'  => 'us-east-1',
    'version' => 'latest',
    'visibility' => 'public',
    'credentials' => [
        'key'    => 'xxxxxx',
        'secret' => 'xxxxxx',
    ],
];

// Create an SDK class used to share configuration across clients.
$sdk = new Aws\Sdk($sharedConfig);

// Create an Amazon S3 client using the shared configuration data.
$client = $sdk->createS3();

$client->uploadDirectory("foo", "bucket", "foo", array(
            'params'      => array('ACL' => 'public-read'),
            'concurrency' => 20,
            'debug'       => true
        ));

成功标准:

我可以使用“静态”链接访问上传文件夹中的文件。 Fx的:

https://s3.amazonaws.com/bucket/foo/001.jpg

2 个答案:

答案 0 :(得分:1)

我通过使用已定义的" Before Execute"来修复它。功能。

  $result = $client->uploadDirectory("foo", "bucket", "foo", array(
            'concurrency' => 20,
            'debug'       => true,
            'before' => function (\Aws\Command $command) {
            $command['ACL'] = strpos($command['Key'], 'CONFIDENTIAL') === false
                ? 'public-read'
                : 'private';
        }

        ));

答案 1 :(得分:0)

使用可以使用:

$s3->uploadDirectory('images', 'bucket', 'prefix',
            ['params' => array('ACL' => 'public-read')]
        );