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

如何在Express路由中展示而非下载PDF文件?

解决PDF直接在浏览器展示而非强制下载的问题

你这个思路方向是对的,设置 Content-Disposition: inline 就是让浏览器尝试直接渲染文件而非触发下载,但可能因为第三方API返回的响应头干扰,导致你的设置没生效。我们需要做一点调整,确保自己的响应头优先级更高:

修改后的代码如下:

exports.print = (req, res) => {
  request("API")
    .on('response', function(response) {
      // 先移除原响应里可能存在的Content-Disposition头,避免它覆盖我们的设置
      delete response.headers['content-disposition'];
      // 设置浏览器识别的响应头
      res.set({
        'Content-Disposition': 'inline; filename="my.pdf"',
        'Content-Type': 'application/pdf'
      });
    })
    .pipe(res);
};

几个关键细节说明:

  • 清理原响应头:如果第三方API返回的响应自带了 Content-Disposition: attachment,它会优先于你设置的 inline 生效,所以必须先删除这个头。
  • 文件名加引号:给文件名套上双引号,能避免文件名包含空格、特殊字符时出现解析问题。
  • 明确Content-Type:虽然大部分情况下浏览器能自动识别,但明确指定 application/pdf 能确保浏览器准确判断文件类型,避免因识别错误触发下载。

另外补充一点:如果用户的浏览器本身不支持PDF预览(比如旧版本浏览器或未安装PDF插件),还是会触发下载,这属于浏览器端的限制,代码层面没法解决。

内容的提问来源于stack exchange,提问作者Pedro Guilherme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:01:13