![](/img/trans.png)
[英]AWS SDK for PHP's S3 stream wrapper works for writing, but not for reading
[英]AWS sdk Amazon S3 Stream Wrapper in php
我是Amazon s3的新手,在我的cakephp3.0應用程序中,我需要將文件從一個存儲桶復制到另一個存儲桶。 為此,我使用composer安裝了AWS開發工具包,並且在我的控制器構造函數中,我已使用憑證初始化了s3客戶端
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}",
));
}
}
現在我遇到一個錯誤
在“ https://s3.mumbai.amazonaws.com/ ”上執行“ ListBuckets”時出錯; AWS HTTP錯誤:創建資源時出錯:[消息] fopen():php_network_getaddresses:getaddrinfo失敗:名稱或服務未知[文件] / var / www / mm / Src / php / operations / vendor / guzzlehttp / guzzle / src / Handler /StreamHandler.php [行] 312 [消息] fopen( https://s3.mumbai.amazonaws.com/ ):無法打開流:php_network_getaddresses:getaddrinfo失敗:名稱或服務未知[文件] / var / www / mm / Src / php / operations / vendor / guzzlehttp / guzzle / src / Handler / StreamHandler.php [行] 312 Aws \\ S3 \\ Exception \\ S3Exception
我想使用一個存儲桶中的數據創建一個zip文件,然后將其復制到另一個存儲桶中,而無需使用流將文件寫入磁盤。 該錯誤的原因是什么? 任何幫助將不勝感激。
現在,當我將zipstream庫用於代碼時,作為流的zip可以正常工作
$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();
但同樣的問題是,我想將zip輸出即時寫到bucket2中。 由於我的文件將包含大尺寸的視頻,因此無法將其存儲在磁盤中作為臨時存儲。 它應該以即時拉鏈的形式寫入存儲桶。
嘗試過但無法使其僅與流一起使用。 僅使用流下載和壓縮到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
));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.