Laravel DOMPDF:如何从存储文件夹加载图像?
Posted
技术标签:
【中文标题】Laravel DOMPDF:如何从存储文件夹加载图像?【英文标题】:Laravel DOMPDF: how to load image from storage folder? 【发布时间】: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" => true
它适用于典型的 html 视图,但不适用于 DOMPDF。是根本不兼容还是我做错了什么?
【问题讨论】:
你试过了吗:$image = Image::make(storage_path('app/' . $img));
?
@tptcat 路由本身在 HTML 视图中工作。你的意思是你的语法对于 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 标签内,<div style="background-image: url(' asset('/images/'. $image) ');" >
我的错,帖子说public_path,我的图像在存储路径中,我不希望它们可以公开访问,因此我需要使用完整路径来实现它,但我让它工作的唯一方法是使用 laravel 存储,获取文件并将其传递到 base64 编码的视图中
嗯,你读过这个文档吗? laravel.com/docs/5.6/filesystem#configuration您的文件将保存在存储文件夹中。【参考方案2】:
最后,我绕过了路由,使用str_replace
将/media/
切换到绝对路径,如下所示:
str_replace('/media/', '../storage/app/', $link);
在 HTML 中从 public
到 storage
有点违反直觉,但它似乎是 DOMPDF 呈现图像的唯一方法。还发现 DOMPDF 不会通过 HTTPS 呈现远程图像。
【讨论】:
以上是关于Laravel DOMPDF:如何从存储文件夹加载图像?的主要内容,如果未能解决你的问题,请参考以下文章
dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF
如何在 Laravel 中将多个数组/变量传递给 DOMPDF?
Laravel:尝试获取 PDF 时出现 DOMPDF 错误
如何使用 barryvdh/laravel-dompdf 将 PDF 附加到 Laravel 的电子邮件中