2017-01-17 3 views
0

Я новичок в amazon s3.In мое приложение cakephp3.0 Мне нужно скопировать файл из одного ведра в другой. Для этого я установил AWS SDK с помощью композитора и в моей функции конструктора контроллер я initilized s3 клиента с учетными даннымиAWS sdk Amazon S3 Stream Wrapper в php

public function initialize() { 
    parent::initialize(); 
    $this->s3Client = new S3Client([ 
     'version' => 'latest', 
     'region' => 'mumbai', 
     'credentials' => [ 
      'key' => 'key', 
      'secret' => 'secrect', 
     ], 
    ]); 
} 

И в моей функции скопировать файл

public function amazonCopy() {  
    $this->s3Client->registerStreamWrapper(); 
     $sourceBucket ="collect"; 
     $sourceKeyname = "testFolder"; 

     $s3Client->copyObject(array(
      'Bucket'  => "test1", 
      'Key'  => testFolder, 
      'CopySource' => "{$sourceBucket}/{$sourceKeyname}", 
     )); 
    } 
} 

Теперь я получаю ошибку

Error executing "ListBuckets" on " https://s3.mumbai.amazonaws.com/ "; AWS HTTP error: Error creating resource: [message] fopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known [file] /var/www/mm/Src/php/operations/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php [line] 312 [message] fopen(https://s3.mumbai.amazonaws.com/): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known [file] /var/www/mm/Src/php/operations/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php [line] 312 Aws\S3\Exception\S3Exception

Я хочу создать zip-файл с использованием данных в одном ковше и скопировать его в другое пространство без записи файла на диск с использованием потока. Какова будет причина этой ошибки? Любая помощь будет оценена.

Теперь Архивирование как поток работает должным образом, когда я использовал zipstream библиотеку для этого я использовал код

$this->s3Client->registerStreamWrapper(); 
$zip = new ZipStream\ZipStream('example.zip'); 

$zip->addFile('hello.txt', 'This is the contents of hello.txt');  

$zip->addFileFromPath('happy_children-wide.jpg', 's3://mmvideo-test/Music/happy_children-wide.jpg'); 
$zip->addFileFromPath('txte', 's3://test/Music/test1.txt'); 
$zip->finish(); 

Но опять проблема в том, что я хочу, чтобы записать вывод молнии на лету в bucket2 , Потому что мои файлы будут содержать видео большого размера, поэтому его нельзя хранить на диске в качестве временного хранилища. он должен писать в ведро как zip на лету.

ответ

0

Пробовал, но не мог заставить его работать с потоками. Использование потоков только для загрузки и записи в файл tmp.

$client = new S3Client(array(
    'region'  => 'ap-northeast-1', 
    'version'  => 'latest', 
    'credentials' => $provider 
)); 

$client->registerStreamWrapper(); 

$objects = $client->listObjectsV2([ 
    'Bucket' => $fromBucket, 
    'Prefix' => $fromPrefix 
]); 
$keys = array(); 
foreach ($objects['Contents'] as $o) { 
    $keys[] = $o['Key']; 
} 

$tmp = tempnam(sys_get_temp_dir(), 'zipstream'); 
echo "creating temp zip: $tmp\n"; 
$ostream = fopen($tmp, 'w'); 
$zip = new ZipStream(null, array(ZipStream::OPTION_OUTPUT_STREAM => $ostream)); 

foreach($keys as $k){ 
    echo "$k\n"; 
    $istream = fopen("s3://$fromBucket/$k", 'r'); 
    $zip->addFileFromStream($k, $istream); 
    fflush($ostream); 
    fclose($istream); 
} 

$zip->finish(); 

$client->putObject(array(
    'Bucket'  => $toBucket, 
    'Key'   => $toZip, 
    'SourceFile' => $tmp 
)); 
+0

Я хочу создать zip-файл с использованием данных в одном ковше и скопировать его в другое ведро без записи файла на диск с использованием потока. –

+0

несколько файлов в один ZIP-архив? или просто сжать каждый файл? Глядя на http://php.net/manual/en/class.ziparchive.php, похоже, что вы не можете делать это с потоками. Но вы можете сжимать отдельные файлы с помощью потоков с помощью zlib http://php.net/manual/en/ref.zlib.php – at0mzk

+0

hi at0mzk Я хочу заархивировать несколько файлов в один ZIP-архив. Это можно использовать с zip-потоком, но я хочу это нужно написать в s3bucket, который я указал. И это происходит на лету. Теперь можно сделать zip как поток, но не возможно написать s3bucket –

Смежные вопросы