2016-02-10 3 views
0

Я знаю, что нет концепции папок в S3, она использует плоскую файловую структуру. Однако я просто использую термин «папка» для простоты.Сделать AWS s3 общедоступной, используя php

Предпосылки:

  • An s3 ведро называется Foo
  • Foo папки был обнародован с помощью консоли AWS Management
  • Apache
  • PHP 5
  • Standard AWS SDK

Проблема:

Возможно загрузить папку с использованием SDK для PHP AWS. Тем не менее, папка тогда доступна только пользователю, который загрузил папку и не был общедоступным для чтения, как мне бы хотелось.

Процедура:

$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 

ответ

0

Я исправил его, используя определенную функцию «Перед выполнением».

$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'; 
     } 

     )); 
0

Использование можно использовать следующим образом:

$s3->uploadDirectory('images', 'bucket', 'prefix', 
      ['params' => array('ACL' => 'public-read')] 
     ); 
Смежные вопросы