我正在Lumen项目中使用intervention image,直到我将编码的图像作为可下载的响应进行处理,然后一切正常,该响应在表单提交后包含要格式化为特定格式的图像文件,例如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;
}
但不幸的是,它不是我的预期输出,只是显示了图像。
从此post开始,我使用代码并尝试实现自己的目标
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;
}
但是它不起作用,而是显示了这个错误
有什么帮助,有想法吗?
答案 0 :(得分:0)
在Laravel中,您可以使用response()->stream()
,但是,如注释中所述,流明在响应上没有流方法。话虽这么说,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,
]);