2012-03-15 32 views
1

zend框架爲amazon S3 api提供了一個php包裝,它簡化了較低級別的REST功能。Zend框架亞馬遜S3 - 如何將文件存儲爲減少冗餘?

http://framework.zend.com/manual/en/zend.service.amazon.s3.html

例如存儲一個文件中的S3所有你需要做的是

$s3->putFile("me.png", "my-own-bucket/Pictures/Me.png", 
    array(Zend_Service_Amazon_S3::S3_ACL_HEADER => 
      Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ)); 

默認情況下,對象存儲在桶爲常規存儲。 zend框架中是否有任何功能允許我指定對象作爲S3中的Reduced Redundancy Storage(RRS)存儲?

如果不是有什麼辦法,我可以設置存儲桶中所有對象的默認存儲爲RRS?

回答

5

http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOST.html

您是否嘗試過以下後RockyFords建議? 下面的代碼應該以正確的模式上傳它。

$s3->putFile("me.png", "my-own-bucket/Pictures/Me.png", 
    array(
     Zend_Service_Amazon_S3::S3_ACL_HEADER => Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ, 
     'x-amz-storage-class' => 'REDUCED_REDUNDANCY' 
    ) 
); 
+0

謝謝傑米,這個伎倆,在16小時內得到獎勵 – user784637 2012-03-27 03:18:13

2

看起來您可以將第三個參數傳遞給Zend_Services_S3::putFile and putObject$meta並且它接受標量或數組。

public function putFile($path, $object, $meta=null) 
    { 
     $data = @file_get_contents($path); 
     if ($data === false) { 
      /** 
      * @see Zend_Service_Amazon_S3_Exception 
      */ 
      require_once 'Zend/Service/Amazon/S3/Exception.php'; 
      throw new Zend_Service_Amazon_S3_Exception("Cannot read file $path"); 
     } 

     if (!is_array($meta)) { 
      $meta = array(); 
     } 

     if (!isset($meta[self::S3_CONTENT_TYPE_HEADER])) { 
      $meta[self::S3_CONTENT_TYPE_HEADER] = self::getMimeType($path); 
     } 

     return $this->putObject($object, $data, $meta); 
    } 

和S3只是想要一個標題更改設置對象或文件作爲RRS:

問:我如何指定我想用RRS存儲我的數據?

Amazon S3中的所有對象都具有存儲類設置。默認 設置爲STANDARD。您可以在PUT請求 上使用可選標題來指定設置REDUCED_REDUNDANCY。

您可能不得不在API中挖掘一下以準確找到要傳遞的內容,但這應該指向正確的方向。

+0

感謝領先的洛奇,但我無法找到一種方式來存儲文件爲rrs。 – user784637 2012-03-26 20:16:37