Laravel 响应:返回图片流
问题
我不想让用户知道图片的真实 URL,那么如何在响应中返回图片流,即返回的不是一个浏览器可直接下载的图片文件 URL,而是图片的字节流?
回答
如果不想让用户知道图片(或其它类型的文件)的真实 URL,直接返回文件的字节流,可以使用 stream
方法。这个方法接受回调、可选的状态码和头信息数组作为参数,见下面的示例代码:
Route::get('/pic', function () {
$fullPath = base_path().DIRECTORY_SEPARATOR.'pic'.DIRECTORY_SEPARATOR.'demo.jpg';
return response()->stream(function () use ($fullPath) {
echo file_get_contents($fullPath);
}, 200, ['Content-Type' => 'image/jpeg']);
});
上面的代码在 stream
方法的回调函数中,直接输出保存在项目根目录的 pic
子目录中的 demo.jpg
的内容, 在第三个参数中设置响应标头的 Content-Type
为 image/jpeg
,如果 Content-Type
设置不正确,则浏览器显示的会是乱码。
好用 谢谢了
请问如何通过函数的形式应用到blade模板里面使用呢?
改成这样的函数,但是不行……