gpt4 book ai didi

Laravel + 图像干预 : Force download of file that is not saved

转载 作者:行者123 更新时间:2023-12-01 09:16:41 25 4
gpt4 key购买 nike

我想简单地上传文件,调整它们的大小,然后为每个上传的文件强制下载。我不想保存文件。

调整大小等工作正常,但我无法强制下载新文件。

$content = $image->stream('jpg');

return response()->download($content, $name);

显示的片段导致

is_file() expects parameter 1 to be a valid path, string given

很可能是因为 $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);

这就是我们正在做的事情。我们正在使用 Intervention Image 将该图像编码为适合我们的正确文件类型格式。然后我们自己设置浏览器标题来告诉浏览器它是什么类型的文件,并且我们希望浏览器将其视为可下载的附件。最后,我们使用 Laravel 的 stream() 方法返回响应并使用闭包。我们告诉闭包它可以使用 use ($image) 访问图像的编码数据,然后我们简单地将原始数据回显到页面上。从那里我们告诉浏览器 HTTP 代码是 200(OK),然后给它我们的 header 告诉浏览器该做什么。

您的问题是 Laravel 方便的 download() 方法期望它是文件系统上的文件。所以我们必须将它流式传输并自己手动设置标题。

您将需要编写一些额外的代码来处理干预使用的 encode() 方法以及返回的 Content-Type 的不同文件扩展名。您可以找到所有可用 mime 类型的列表 here .

我希望这会有所帮助。

编辑: Laravel 的更高版本在响应对象上引入了 deleteFileAfterSend() 方法。如果您可以暂时将文件保存到服务器,您可以这样做:

return response()->download($path)->deleteFileAfterSend();

关于Laravel + 图像干预 : Force download of file that is not saved,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com