我有一个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文件在相同的方式下也能正常工作。
答案 0 :(得分:0)
如果使用本地磁盘,则可以返回如下文件:
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));
}