Fra*_*ost 2 laravel laravel-5 intervention laravel-5.4
我只想上传文件,调整大小,然后为每个上传的文件强制下载。我不希望保存的文件。
调整大小等工作正常,但是我无法设法强制下载新文件。
$content = $image->stream('jpg');
return response()->download($content, $name);
Run Code Online (Sandbox Code Playgroud)
所示出的片段的结果在
is_file()期望参数1为有效路径,给定字符串
很有可能是因为$ content不是路径而是实际数据。
有没有强制执行下载而不先保存下载的方法?
尝试这个:
$url = "https://cdn.psychologytoday.com/sites/default/files/blogs/38/2008/12/2598-75772.jpg";
$name = 'happy.jpg';
$image = Image::make($url)->encode('jpg');
$headers = [
'Content-Type' => 'image/jpeg',
'Content-Disposition' => 'attachment; filename='. $name,
];
return response()->stream(function() use ($image) {
echo $image;
}, 200, $headers);
Run Code Online (Sandbox Code Playgroud)
这就是我们正在做的。我们正在使用干预图像将图像编码为适合我们的正确文件类型格式。然后我们设置浏览器标题自己,告诉浏览器是什么类型的文件,而我们希望浏览器把它当作一个可下载的附件。最后,我们使用Laravel stream()方法返回响应并使用闭包。我们告诉闭包可以访问图像的编码数据,use ($image)然后将原始数据简单地回显到页面上。从那里,我们告诉浏览器HTTP代码为200(确定),然后将其标头告知浏览器该怎么做。
您的问题是Laravel的便捷download()方法期望它是文件系统上的文件。因此,我们必须对其进行流传输并自己手动设置标头。
您将需要编写一些其他代码来处理encode()Intervention使用的方法以及Content-Type返回的文件扩展名。您可以在此处找到所有可用的mime类型的列表。
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |