Принудительно загрузить изображение в качестве ответа люмен + изображение вмешательства - PullRequest
0 голосов
/ 26 декабря 2018

Я использую интервенционное изображение в моем проекте Lumen, и все работает, пока я не сталкиваюсь с созданием закодированного изображения в качестве загружаемого ответа, который при отправке формы содержит файл изображения, который будет отформатирован для конкретногоформат, например, webp, jpg, png будет отправлен обратно в виде загружаемого файла пользователю, ниже моя попытка.

public function image_format(Request $request){
    $this->validate($request, [
        'image' => 'required|file',
    ]);

    $raw_img = $request->file('image');

    $q = (int)$request->input('quality',100);
    $f = $request->input('format','jpg');

    $img = Image::make($raw_img->getRealPath())->encode('webp',$q);

    header('Content-Type: image/webp');

    echo $img;
}

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

из этой публикации , я использую код и пытаюсь достичь своей цели

public function image_format(Request $request){
        $this->validate($request, [
            'image' => 'required|file',
        ]);

        $raw_img = $request->file('image');

        $q = (int)$request->input('quality',100);
        $f = $request->input('format','jpg');

        $img = Image::make($raw_img->getRealPath())->encode('webp',$q);
        $headers = [
            'Content-Type' => 'image/webp',
            'Content-Disposition' => 'attachment; filename='. $raw_img->getClientOriginalName().'.webp',
        ];

        $response = new BinaryFileResponse($img, 200 , $headers);
        return $response;
    }

, но он не работает, вместо этого он показал мне эту ошибку

enter image description here

любая помощь, идеи, пожалуйста?

1 Ответ

0 голосов
/ 26 декабря 2018

В Laravel вы можете использовать response()->stream(), однако, как уже упоминалось в комментариях, у Lumen нет потокового метода для ответа.При этом метод stream() - это всего лишь оболочка для возврата нового экземпляра StreamedResponse (который уже должен быть включен в ваши зависимости).

Следовательно, что-то вроде следующего должно работать для вас:

$raw_img = $request->file('image');

$q = (int)$request->input('quality', 100);
$f = $request->input('format', 'jpg');

$img = Image::make($raw_img->getRealPath())->encode($f, $q);

return new \Symfony\Component\HttpFoundation\StreamedResponse(function () use ($img) {
    echo $img;
}, 200, [
    'Content-Type'        => 'image/jpeg',
    'Content-Disposition' => 'attachment; filename=' . 'image.' . $f,
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...