2012-11-22 109 views
1

因此,AWS php sdk 2.x庫最近已經推出,我已經花了一天時間從1.5x升級到火雞。我的第一個是升級我的S3備份類。我很快遇到了一個錯誤:AWS PHP SDK版本2 S3 putObject錯誤

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語法來做同樣的事情。我的問題出現在他們已經(邪惡地)將舊的「fileupload」更改爲「Body」,並使其更加抽象,以便如何實際附加文件!我已經嘗試了兩種方法,我認爲它與依賴關係(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 
          ) 
    )); 

感謝一如既往,

[R

回答

6

你導入EntityBody到您的命名空間?

use Guzzle\Http\EntityBody; 

否則,你所要做的

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

感謝傑里米 - 命名空間仍然沒有彈出我的調試雷達立即呢。 – Ross

+0

沒有問題。如果您只是開始使用名稱空間,則需要一點時間來適應。這將很快成爲第二大自然。 –