簡體   English   中英

AWS PHP SDK 版本 2 S3 putObject 錯誤

[英]AWS PHP SDK Version 2 S3 putObject Error

所以最近推出了 AWS php sdk 2.x 庫,我花了一天時間從 1.5x 升級。 我的第一個任務是升級我的 S3 備份類。 我很快遇到了一個錯誤:

Fatal error: Class 'EntityBody' not found in /usr/share/php/....my file here

嘗試將壓縮文件上傳到 S3 存儲桶時。 我寫了一個類來抽象一下寫入以允許多區域備份,所以下面引用 $this 的代碼就是這樣。

$response1 = $s3->create_object(
        $this->bucket_standard,
        $this->filename,
        array(
         'fileUpload'  => $this->filename,
         'encryption' => 'AES256',
         //'acl'         => AmazonS3::ACL_PRIVATE,
         'contentType' => 'text/plain',
         'storage'     => AmazonS3::STORAGE_REDUCED,
         'headers'     => array( // raw headers
                              'Cache-Control'    => 'max-age',
                              //'Content-Encoding' => 'gzip',
                              'Content-Language' => 'en-US'
                              //'Expires'       => 'Thu, 01 Nov 2012 16:00:00 GMT'
                            ),
          'meta'     => array(
                              'param1' => $this->backupDateTime->format('Y-m-d H:i:s'),     // put some info on the file in meta tags
                              'param2' => $this->hostOrigin
                            ) 
            )
      );

以上在 1.5.x 上運行良好。

現在,在 2.x 中,我正在查看他們的文檔,他們幾乎改變了一切(太好了......最大的諷刺)

$s3opts=array('key'=> $this->accessKey, 'secret' => $this->secretKey,'region' => 'us-east-1');
$s3 = Aws\S3\S3Client::factory($s3opts);

所以現在我有了一個新的 S3 對象。 這是我的 2.x 語法來做同樣的事情。 我的問題出現在他們(險惡地)將舊的“文件上傳”更改為“正文”並使其在如何實際附加文件方面更加抽象! 我已經嘗試了這兩種方法,我認為它與依賴項(Guzzle 或 Smyfony 等)有關,但是每當我嘗試執行此操作時,我都會收到上述錯誤(或替換 Stream,如果您願意)。

我已經嘗試將 Composer 與 composer.json 和 aws.phar 一起使用,但在我開始之前,我是否遺漏了一些愚蠢的東西?

$response1 = $s3->putObject(array(
        'Bucket' => $this->bucket_standard,
        'Key'    => $this->filename,
        'ServerSideEncryption' => 'AES256',
        'StorageClass' => 'REDUCED_REDUNDANCY',
        'Body' => EntityBody::factory(fopen($this->filename, 'r')),
        //'Body' => new Stream(fopen($fullPath, 'r')),

        'MetaData' => array(
                              'BackupTime' => $this->backupDateTime->format('Y-m-d H:i:s'),     // put some info on the file in meta tags
                              'HostOrigin' => $this->hostOrigin
                            ) 
      ));

一如既往的感謝,

電阻

您是否將 EntityBody 導入您的命名空間?

use Guzzle\Http\EntityBody;

否則,你必須做

'Body' => \Guzzle\Http\EntityBody::factory(fopen($this->filename, 'r')),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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