Zend Framework amazon S3 - Как сохранить файл с уменьшенной избыточностью? - PullRequest
2 голосов
/ 15 марта 2012

Zend Framework предоставляет PHP-оболочку для API Amazon S3, которая упрощает функциональность REST более низкого уровня.

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

Например, для сохранения файла в s3 все, что вам нужноdo is

$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 Framework, которые позволят мне указать объекты, которые будут храниться в виде Сокращенного избыточного хранилища (RRS) в S3?

Если нет, я могу установить хранилище по умолчанию для всех объектов введро как RRS?

Ответы [ 3 ]

5 голосов
/ 27 марта 2012

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 голосов
/ 15 марта 2012

Похоже, что вы можете передать третий аргумент 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:

Q: Как мне указать, что я хочу хранить свои данные с использованием RRS?

Все объекты в Amazon S3 имеют настройку класса хранения.Значением по умолчанию является СТАНДАРТ.Вы можете использовать необязательный заголовок в запросе PUT, чтобы указать параметр REDUCED_REDUNDANCY.

вам, возможно, придется немного покопаться в API, чтобы найти именно то, что передать, но это должно указать васнаправление.

0 голосов
/ 28 июня 2018

Если вы получаете следующую ошибку.просто увеличить размер загружаемого файла в php.ini.по умолчанию увеличение на 2 МБ на 20 МБ или согласно вашему требованию.

 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...