laravel - изменение размера изображений и сохранение в Amazon S3 - PullRequest
0 голосов
/ 24 июня 2018

Когда пользователь загружает свою фотографию профиля, я хочу создать 3 версии этого изображения с разными размерами, а затем загружать все в amazon s3.

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

public function store(Request $request){

    if($request->has('avatar')){

        $avatar = $request->file('avatar');

        $filename = md5(time()).'_'.$avatar->getClientOriginalName();

        $normal = Image::make($avatar)->resize(160, 160);

        $medium = Image::make($avatar)->resize(80, 80);

        $small = Image::make($avatar)->resize(40, 40);

        Storage::disk('s3')->put('/users/'.Auth::user()->uuid.'/avatars/normal/'.$filename, fopen($normal, 'r+'), 'public');

        Storage::disk('s3')->put('/users/'.Auth::user()->uuid.'/avatars/medium/'.$filename, fopen($medium, 'r+'), 'public');

        Storage::disk('s3')->put('/users/'.Auth::user()->uuid.'/avatars/small/'.$filename, fopen($small, 'r+'), 'public');

        $user = User::findorFail(Auth::user()->id);
        $user->avatar = $filename;
        $user->save();

        return redirect()->back();
    }

}

Когда я пытаюсь отправить файл, я получаю эту ошибку.

fopen(): Filename cannot be empty

Любая помощь приветствуется

Ответы [ 2 ]

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

ОБНОВЛЕНИЕ Я сделал так, что если у кого-то возникнет такая же проблема, я надеюсь, он найдет этот код полезным.

public function store(Request $request){

    if($request->has('avatar')){

        $avatar = $request->file('avatar');
        $extension = $request->file('avatar')->getClientOriginalExtension();

        $filename = md5(time()).'_'.$avatar->getClientOriginalName();

        $normal = Image::make($avatar)->resize(160, 160)->encode($extension);
        $medium = Image::make($avatar)->resize(80, 80)->encode($extension);
        $small = Image::make($avatar)->resize(40, 40)->encode($extension);

        //$path = '/users/'.Auth::user()->uuid.'/avatar/normal/'.$filename;

        //dd($normal);

        Storage::disk('s3')->put('/users/'.Auth::user()->uuid.'/avatar/normal/'.$filename, (string)$normal, 'public');

        Storage::disk('s3')->put('/users/'.Auth::user()->uuid.'/avatar/medium/'.$filename, (string)$medium, 'public');

        Storage::disk('s3')->put('/users/'.Auth::user()->uuid.'/avatar/small/'.$filename, (string)$small, 'public');

        $user = User::findorFail(Auth::user()->id);
        $user->avatar = $filename;
        $user->save();

        return redirect()->back();
    }

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

При использовании Intervention обязательно укажите путь к файлу в вашей файловой системе. Я вижу, что вы даете строку (имя файла, а не путь). Таким образом, вмешательство может создать образ из-за этого.

Таким образом, вы можете сначала сохранить файл в локальной файловой системе, а затем указать полный путь при вызове:

$normal = Image::make($full_path)->resize(160, 160);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...