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

Laravel中如何实现运单PDF直接下载而非在浏览器中打开

Laravel运单PDF强制下载修改方案

核心修改逻辑

  • 浏览器默认对Content-Type: application/pdf的内容采用内嵌打开模式,只要新增Content-Disposition: attachment响应头即可触发下载
  • 移除原代码中自定义的e()输出函数,该函数输出的<pre>标签会污染PDF二进制内容,导致文件损坏
  • 优先使用Laravel自带的响应方法返回内容,避免手动调用header出现的响应冲突问题

修改后完整代码

public function awb(Request $request)
{
    $url = 'http://web.com/print/print.action';

    $key = $request->key;
    $billCode = $key;

    $data = array(
        'billcode' => $billCode,
        'account' => 'xxx',
        'password' => 'xxx',
        'customercode' => 'xxx',
    );

    $t = array(
        'logistics_interface' => json_encode($data), 
        'msg_type' => '1', 
        'data_digest' => md5($billCode)
    );

    $s = curl_init();
    curl_setopt($s,CURLOPT_URL,$url);
    curl_setopt($s,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($s,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($s,CURLOPT_POSTFIELDS,http_build_query($t));
    $r = curl_exec($s);
    curl_close($s);

    // 直接返回下载响应,文件名为运单号+运单.pdf,可自定义修改
    return response()->streamDownload(function () use ($r) {
        echo $r;
    }, $billCode . '-运单.pdf', [
        'Content-Type' => 'application/pdf',
    ]);
}

额外注意事项

  • 确保curl请求返回的内容是正常的PDF二进制流,没有额外的报错输出
  • 如果不需要动态生成文件名,也可以直接在第二个参数位置写死固定的PDF文件名

内容的提问来源于stack exchange,提问作者Izzat Z.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:18:02