簡體   English   中英

PHP中的AWS開發工具包Amazon S3 Stream Wrapper

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM