You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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链接及相关设置,现需确认以下问题:

  1. 是否为服务器相关错误?
  2. greendc服务器是否无法访问Storage符号链接?
  3. 使用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>

问题解答

  1. 是服务器相关错误:strict-origin-when-cross-origin错误属于跨域/资源访问策略类问题,且仅在greendc服务器出现,说明问题源于该服务器的配置或环境差异。
  2. 大概率是greendc服务器无法正常访问Storage符号链接:Laravel的public目录依赖public/storage符号链接映射到storage/app/public,若服务器禁用符号链接、链接创建失败或目标目录权限不足,都会导致图片无法访问。可手动检查public/storage是否为有效符号链接,以及对应目录的读写权限。
  3. asset()方法本身合规,但路径和使用场景存在问题:
    • 代码中asset("storage//uploads/...")包含双斜杠//,可能导致路径解析异常;
    • dompdf生成PDF时,使用asset()生成的Web URL加载图片,可能触发服务器跨域策略或本地文件访问限制。更稳妥的方式是使用本地绝对路径加载图片,替换为public_path():
      <img src="<?php echo public_path("storage/uploads/download/data/img/Pol_filled.png")?>" alt="img">
      
      这样dompdf直接读取本地文件,规避跨域和Web访问的问题。

内容的提问来源于stack exchange,提问作者ABHILASHA K.M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:15:21