2016-02-23 61 views
2

由於某些原因,當我將文件夾上傳到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/*",    
       ] 
      } 
     ] 
    } 

任何非常感謝。乾杯

回答

5

我一直在努力回來。

試着改變你上傳聲明這一個波紋管

$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

謝謝!這樣可行。不知道爲什麼他們記錄的例子不起作用。非常令人沮喪。 –