Laravel PDF生成异常:greendc服务器无法读取Storage图片问题排查
PDF生成失败问题排查(greendc服务器)
我们使用的技术栈:
- PHP 7.3|8.0
- barryvdh/laravel-dompdf ^0.9.0
- Laravel ^8.81
PDF在本地环境及Plesk服务器可正常生成,但在greendc服务器生成失败,出现strict-origin-when-cross-origin错误,无法访问Storage文件夹中的图片。已配置Storage链接及相关设置,现需确认以下问题:
- 是否为服务器相关错误?
- greendc服务器是否无法访问Storage符号链接?
- 使用
asset()是否为不恰当的方法?
控制器代码
$pdf = PDF::loadView('pdf/topicDetail',$topic); $pdf->setPaper('A4', 'landscape'); $fileName = 'export-'. date('m-d-Y-His').'.pdf'; Storage::put('public/uploads/docs/downloads/'.$fileName, $pdf->output()); $link = Storage::disk('docs')->url('downloads/'.$fileName); return $this->successResponse($link);
Blade代码片段
<td style="text-align: center; padding: 10px;"> <img src="<?php echo asset("storage//uploads/download/data/img/Pol_filled.png")?>" alt="img"> <img src="<?php echo asset("storage//uploads/download/data/img/Pol.png")?>" alt="img"> </td>
问题解答
- 是服务器相关错误:strict-origin-when-cross-origin错误属于跨域/资源访问策略类问题,且仅在greendc服务器出现,说明问题源于该服务器的配置或环境差异。
- 大概率是greendc服务器无法正常访问Storage符号链接:Laravel的public目录依赖
public/storage符号链接映射到storage/app/public,若服务器禁用符号链接、链接创建失败或目标目录权限不足,都会导致图片无法访问。可手动检查public/storage是否为有效符号链接,以及对应目录的读写权限。 asset()方法本身合规,但路径和使用场景存在问题:- 代码中
asset("storage//uploads/...")包含双斜杠//,可能导致路径解析异常; - dompdf生成PDF时,使用
asset()生成的Web URL加载图片,可能触发服务器跨域策略或本地文件访问限制。更稳妥的方式是使用本地绝对路径加载图片,替换为public_path():
这样dompdf直接读取本地文件,规避跨域和Web访问的问题。<img src="<?php echo public_path("storage/uploads/download/data/img/Pol_filled.png")?>" alt="img">
- 代码中
内容的提问来源于stack exchange,提问作者ABHILASHA K.M
相关产品推荐
相关产品推荐

