php - 无法显示图像; 拉拉维尔
问题描述
我有一个 laravel 5.7 项目,我正在尝试将图像渲染到浏览器。
如果我只是获取文件的内容,它的工作原理如下:
$contents = Storage::disk($file->disk)->get($file->path);
$new = 'data:'.$file->mimetype.';base64,' . base64_encode($contents);
echo '<img src="'. $new .'">';
通过使用上面的代码,我可以看到图像,就像我们在带有 img 标签的 html 文件中看到的那样。但我不要这个!
我只想以我们在浏览器中看到图像的方式渲染图像!所以我试图附加标题类型如下:
$contents = Storage::disk($file->disk)->get($file->path);
return response($contents)
->header('Content-Type', $file->mimetype)
->header('Content-Disposition', 'inline;');
上面的代码不起作用,我收到错误“无法显示图像 [url],因为它包含错误”;
我不知道我在这里错过了什么!
我不想将这些图像文件保留在公共区域,并且 PDF 文件可以使用相同的方法正常工作。
解决方案
如果您使用的是本地磁盘,则可以返回如下文件:
return response()->file('/your/file/path/image.png');
编辑
回应您的评论...
我提到了local
磁盘,而不是public
磁盘。他们是两个不同的东西。您仍然可以将其用于受保护的文件。
public function show(File $file)
{
// allow or deny according to File Policy
// you would need to create a policy if you don't already have one
$this->authorize('view', $file);
// serve the local file
return response()->file(storage_path($file->path));
}