Принудительно загрузить изображение в качестве ответа люмен + изображение вмешательства
Я использую изображение вмешательства в своем проекте 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;
}
но это не работает, вместо этого он показал мне эту ошибку
любая помощь, идеи, пожалуйста?
1 ответ
В 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,
]);