【问题标题】:Laravel DOMPDF: how to load image from storage folder?Laravel DOMPDF:如何从存储文件夹加载图像?
【发布时间】:2016-09-01 22:46:46
【问题描述】:

存储在Laravel 5.2/storage/app/ 文件夹中的图像未渲染到DOMPDF。我收到一条错误消息:image not found or type unknown

图片的路径是storage/app/v6_dashboard.png,我试过这些:

<img src="/media/v6_dashboard.png" />
<img src="media/v6_dashboard.png" />
<img src="http://localhost:8000/media/v6_dashboard.png" />

使用这条路线的:

Route::get('/media/{img}', function ($img) {
  $image = Image::make(Storage::disk('local')->get($img));
  return Response::make($image->encode('jpg'), 200, ['Content-Type' => 'image/jpeg']);
});

注意我有这个配置集:"DOMPDF_ENABLE_REMOTE" =&gt; true

它适用于典型的 HTML 视图,但不适用于 DOMPDF。是根本不兼容还是我做错了什么?

【问题讨论】:

  • 你试过了吗:$image = Image::make(storage_path('app/' . $img));
  • @tptcat 路由本身在 HTML 视图中工作。你的意思是你的语法对于 DOMPDF 会更好吗?

标签: php image laravel dompdf


【解决方案1】:

您需要引用图像的公共路径。因此,如果“image.jpg”在您的 public/images 文件夹中并存储在名为 $image 的变量中,您可以执行以下操作:

<img src="{{ public_path() . $image }}">

dompdf 需要服务器上的绝对路径,而不是客户端看到的!

【讨论】:

  • 这适用于 img 标签,但是当尝试在 background-image css prop 中使用它时不起作用。有什么建议吗?
  • 什么意思,如果被css访问呢?只需将您的图片放入 public/images/ .my-css-class{ background-image: url("/images/file-name.png") }
  • 或仅在 html 标签内,&lt;div style="background-image: url('{{ asset('/images/'. $image) }}');" &gt;
  • 我的错,帖子说public_path,我的图像在存储路径中,我不希望它们可以公开访问,因此我需要使用完整路径来实现它,但我让它工作的唯一方法是使用 laravel 存储,获取文件并将其传递到 base64 编码的视图中
  • 嗯,你读过这个文档吗? laravel.com/docs/5.6/filesystem#configuration您的文件将保存在存储文件夹中。
【解决方案2】:

最后,我绕过了路由,使用str_replace/media/ 切换到绝对路径,如下所示:

str_replace('/media/', '../storage/app/', $link);

在 HTML 中从 publicstorage 有点违反直觉,但它似乎是 DOMPDF 呈现图像的唯一方法。还发现 DOMPDF 不会通过 HTTPS 呈现远程图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-17
    • 2016-05-01
    • 1970-01-01
    • 2021-12-07
    • 2014-02-03
    • 2020-11-10
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多