Я сохраняю изображение на s3 и путь s3 к моей базе данных. Я вызываю путь, когда мне нужно показать изображение. Поэтому прямо сейчас у меня проблемы с изменением размера этого изображения, прежде чем сохранять его на s3. Я получаю сообщение об ошибке:Как изменить размер изображения с помощью вмешательства перед сохранением в s3?
Command (getRealPath) is not available for driver (Gd).
это то, что мой контроллер выглядит
public function up(Request $request) {
$user = $request->user();
$image= $request->file('images');
if(!empty(($image))){
$files = Input::file('images');
foreach($files as $file) {
if(!empty($file)){
$ext = $file->getClientOriginalExtension();
$media = ($user->media->where('category','profile')->first());
if($media == null){
$media = new Media();
$media->category='profile';
}
$this->saveMedia($media, $user,$file);
}
}
return Redirect::back()->with('message','Your profile has been updated');
}
}
private function saveMedia($media, $user, $file){
$ext = $file->getClientOriginalExtension();
$key = strtotime('now') . '.' . $ext;
$id = $user->id;
$url = 'https://s3-us-west-2.amazonaws.com/makersbrand/' . $id . '/' . $media->category . '/';
$media->user_id = $user->id;
$media->path = $url . $key;
$this->fillMedia($media,$user,$file, $key);
$media->save();
}
private function fillMedia($media, $user, $file, $key)
{
$file = Image::make($file)->resize(200,200);
$s3 = AWS::createClient('s3');
$result = $s3->putObject(array(
'Bucket' => self::$_BUCKET_NAME,
'Key' => $user->id . '/'. $media->category .'/'. $key,
'SourceFile' => $file->getRealPath(),
'Metadata' => array(
'Owner' => $user->first_name .' ' . $user->last_name
)
));
}
Update Я не думаю, что мои изображения даже получить изменения размера правильно, прежде чем она попадает на ошибку getClientOriginalExtension. Когда я делаю var_dump после изменения размера, я получаю этот текст:
object(Intervention\Image\Image)#238 (9) { ["driver":protected]=>
object(Intervention\Image\Gd\Driver)#237 (2) { ["decoder"]=>
object(Intervention\Image\Gd\Decoder)#241 (1) {
["data":"Intervention\Image\AbstractDecoder":private]=> NULL }
["encoder"]=> object(Intervention\Image\Gd\Encoder)#242 (4) { ["result"]=>
NULL ["image"]=> NULL ["format"]=> NULL ["quality"]=> NULL } }
["core":protected]=> resource(280) of type (gd) ["backups":protected]=>
array(0) { } ["encoded"]=> string(0) "" ["mime"]=> string(10) "image/jpeg"
["dirname"]=> string(26) "/Applications/MAMP/tmp/php" ["basename"]=>
string(9) "phpVGzVk0" ["extension"]=> NULL ["filename"]=> string(9)
"phpVGzVk0" }
Результат: null. Формат равен NULL. изображение Null. Что я здесь делаю неправильно?
обновление Я переехал Изображение :: сделать для моей функции saveMedia. Теперь я получаю
Command (getRealPath) is not available for driver (Gd).
Мне просто нужно переместить изображение :: make под линией $ ext, и это работает. Но теперь я получаю ту же ошибку, кроме ее для getRealPath. Я использую это, чтобы сохранить изображение на amazon s3. Но я даже не вижу объект пути в моем файле $ после его изменения. – joejoeso