【问题标题】:Zend framework amazon S3 - How to store file as reduced redundancy?Zend framework amazon S3 - 如何将文件存储为减少冗余?
【发布时间】:2012-03-31 16:40:30
【问题描述】:

zend 框架为亚马逊 S3 api 提供了一个 php 包装器,可简化较低级别的 REST 功能。

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 中存储为减少冗余存储 (RRS) 的对象?

如果没有,我可以将存储桶中所有对象的默认存储设置为 RRS 吗?

【问题讨论】:

    标签: php zend-framework amazon-s3


    【解决方案1】:

    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'
        )
    );
    

    【讨论】:

      【解决方案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 中的所有对象都有一个存储类设置。默认 设置为标准。您可以在 PUT 请求上使用可选标头 指定设置 REDUCED_REDUNDANCY。

      您可能需要深入研究 API 才能准确找到要传递的内容,但这应该会为您指明正确的方向。

      【讨论】:

      • 感谢领导 Rocky,但我无法找到将文件存储为 rrs 的方法。
      【解决方案3】:

      如果您收到以下错误。在 php.ini 中简单地增加文件上传大小。默认为 2 mb 增加 20mb 或根据您的要求。

       Error follows...
       Exception: Zend_Service_Amazon_S3_Exception
       Message: Cannot read file 
       Trace: #0 /var/www/html/cabapp/src/cabapp-cms/application/modules/default/controllers/DriverController.php(495): Zend_Service_Amazon_S3->putFile('', 'driver-license/...', Array)
       #1 /var/www/html/cabapp/src/cabapp-cms/application/modules/default/controllers/DriverController.php(640): DriverController->_saveDriver()
       #2 /var/www/html/Zend/Controller/Action.php(516): DriverController->addeditAction()
       #3 /var/www/html/Zend/Controller/Dispatcher/Standard.php(308): Zend_Controller_Action->dispatch('addeditAction')
       #4 /var/www/html/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
       #5 /var/www/html/Zend/Application/Bootstrap/Bootstrap.php(101): Zend_Controller_Front->dispatch()
       #6 /var/www/html/cabapp/src/lib/Ripple/Application/AbstractApplication.php(274): Zend_Application_Bootstrap_Bootstrap->run()
       #7 /var/www/html/cabapp/src/cabapp-cms/cabapp-cms.php(33): Ripple\Application\AbstractApplication->run()
       #8 /var/www/html/cabapp/src/cabapp-cms/application/webroot/index.php(44): require_once('/var/www/html/c...')
       #9 {main}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多