Загрузить измененное изображение на S3, используя Yii

Я хочу загрузить изображение с измененным размером в корзину Amazon S3, используя инфраструктуру Yii, но сделать это напрямую — без загрузки исходного (не измененного) изображения в любую папку, где угодно в структуре Yii, веб-сайта или сервера.

я использовал ThumbsGen расширение для создания эскиза изображения. Код работает, если я загружаю файл на свой сервер. Но если я загружу изображение на S3, то оно не создаст миниатюру.

Мой код выглядит так:

<?php

Yii::app()->setComponents(array('ThumbsGen' => array(

'class' => 'ext.ThumbsGen.ThumbsGen',
'thumbWidth' => Yii::t('constants', 'SECRETCODE_WIDTH'),
'thumbHeight' => Yii::t('constants', 'SECRETCODE_HEIGHT'),
'baseSourceDir' => Yii::app()->request->s3baseUrl.'/uploads/secretcode/original/',
'baseDestDir' => Yii::app()->request->s3baseUrl. '/uploads/secretcode/thumbs/',
'postFixThumbName' => null,
'nameImages' => array('*'),
'recreate' => false,
)));

class SecretCodeController extends MyController {

public function actionCreate() {
$model = new SecretCode;
$model->scenario = 'create';

if (isset($_POST['SecretCode'])) {
$model->attributes = $_POST['SecretCode'];
$temp = $model->promo_image = CUploadedFile::getInstance($model, 'promo_image');

if ($model->validate()) {
$rnd = rand(1, 1000);
$ext = $model->promo_image->extensionName;
$filename = 'secret_' . Yii::app()->user->app_id . '_' . time() . '_' . $rnd . '.' . $ext;                      $success = Yii::app()->s3->upload( $temp->tempName , 'uploads/secretcode/original/'.$filename);

if(!$success)
{
$model->addError('promo_image', Yii::t('constants', 'IMAGE_FAILURE'));
} else {

$model->promo_image = $filename; $model->promo_image = $filename;
$fullImgSource = @Yii::app()->s3->getObject(Yii::app()->params->s3bucket_name,"uploads/secretcode/original/".$filename);

list($width, $height, $type, $attr) = getimagesize($fullImgSource->headers['size']);
$dimensions = array();

$dimensions = CommonFunctions :: SetImageDimensions($width, $height,Yii::t('constants', 'SECRETCODE_WIDTH'), Yii::t('constants', 'SECRETCODE_HEIGHT'));

Yii::app()->ThumbsGen->thumbWidth = $dimensions['width'];
Yii::app()->ThumbsGen->thumbHeight =  $dimensions['height'];
Yii::app()->ThumbsGen->createThumbnails();

}

if ($model->save()) {
Yii::app()->user->setFlash('success', Yii::t('constants', 'Secret Code')." ". Yii::t('constants', 'ADD_SUCCESS'));
$this->redirect(array('create'));
}
}
}
}

$this->render('create', array(
'model' => $model,
));
}
}

В результате я получаю предупреждение PHP:

getimagesize(42368) [<a href='function.getimagesize'>function.getimagesize</a>]: failed to open stream: No such file or directory

Что я делаю неправильно?

1

Решение

getimagesize — получить размер изображения

array getimagesize ( string $filename [, array &$imageinfo ] )

Ваш код:

list($width, $height, $type, $attr) = getimagesize($fullImgSource->headers['size']);

$ fullImgSource-> headers [‘size’] — я сомневаюсь, что он хранит путь к файлу изображения;

попробуй это:

list($width, $height, $type, $attr) = $fullImgSource->headers['size'];

или же

list($width, $height, $type, $attr) = getimagesize(/*path to image*/);

Можно также прочитать Передача файлов в Amazon S3 и из него

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]