在AWS s3文件夹上传(uploadDirectory)期间ACL不适用

问题描述:

由于某些原因,当我将文件夹上传到S3存储桶时,没有应用公开阅读。 (IE,公众无法访问文件)在AWS s3文件夹上传(uploadDirectory)期间ACL不适用

文件上传正常,但它们都设置为私人。尝试了我能想到的一切。感觉就像我缺少一些基本的东西。

使用本指南: https://blogs.aws.amazon.com/php/post/Tx2W9JAA7RXVOXA/Syncing-Data-with-Amazon-S3

这里是我的代码:

require '../vendor/autoload.php'; 

    use Aws\S3\S3Client; 

    $client = S3Client::factory(array( 
     'version' => '2006-03-01', 
     'region' => 'ap-southeast-2', 
     'credentials' => array(
     'key' => 'MYKEY', 
     'secret' => 'MYSECRET',   
    ) 
    ));  

    $dir = 'assets'; 
    $bucket = 'gittestbucket'; 
    $keyPrefix = 'assets';  

    $options = array(
     'params'  => array('ACL' => 'public-read'), 
     'concurrency' => 20, 
     'debug'  => true 
    ); 

    $UploadAWS = $client->uploadDirectory($dir, $bucket, $keyPrefix, $options); 

    var_dump($UploadAWS); 

我的IAM用户策略(也有一组列表的所有桶):

{ 
     "Statement": [ 
      { 
       "Action": "s3:*", 
       "Effect": "Allow", 
       "Resource": [ 
        "arn:aws:s3:::gittestbucket", 
        "arn:aws:s3:::gittestbucket/*",    
       ] 
      } 
     ] 
    } 

任何非常感谢。干杯

我一直在努力回来。

试着改变你上传声明这一个波纹管

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

AWS是它的文档有时令人震惊的,因为它改变了这么多

+1

谢谢!这样可行。不知道为什么他们记录的例子不起作用。非常令人沮丧。 –