首页 > 解决方案 > 无法显示图像; 拉拉维尔

问题描述

我有一个 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 文件可以使用相同的方法正常工作。

标签: phplaravelimage

解决方案


如果您使用的是本地磁盘,则可以返回如下文件:

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));
}

推荐阅读