【问题标题】:The image can not be displayed; laravel无法显示图像;拉拉维尔
【发布时间】:2019-07-16 23:38:00
【问题描述】:

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

【问题讨论】:

标签: php laravel image


【解决方案1】:

如果你使用的是本地磁盘,你可以像这样返回一个文件:

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

【讨论】:

  • 嗨,这个方法不适合我,因为我的图片不在公共目录中,我也不想将它们保存在公共目录中!所有文件都经过哈希处理并将它们保存在公共区域之外。尝试访问时检查访问权限;如果允许,则获取文件内容并在浏览器中提供。在我的情况下,文件可以是 pdf 或图像。 PDF 文件可以正常使用,但无法使用图像!如果我获取内容并将它们转换为 base_64,图像也可以使用
  • 这种方式与公共目录无关。它提供来自任何系统路径的文件。
  • 我添加了额外的编辑来说明如何将此方法用于受保护的文件。
猜你喜欢
  • 2015-03-16
  • 2015-03-28
  • 2021-07-05
  • 1970-01-01
  • 2018-11-12
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多