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

如何实现浏览器预览PDF并在下载时使用自定义文件名

实现PDF先预览再自定义文件名下载的解决方案

问题分析

当前代码中,不设置Content-Disposition时,浏览器会直接预览PDF,但用户下载时文件名由浏览器自动生成(通常是URL路径名或默认名);设置Content-Disposition: attachment会强制文件直接下载,无法先预览。要满足「先预览+用户主动下载+默认文件名」的需求,可采用以下两种方案:


方案一:前端预览按钮 + 独立下载接口

  1. 预览接口(保持现有逻辑)
    后端提供预览接口,不设置Content-Disposition,让浏览器直接渲染PDF:

    var data = fs.readFileSync('/Users/my/Desktop/demo.pdf');
    res.contentType("application/pdf");
    res.send(data);
    
  2. 新增下载接口
    单独写一个用于触发下载的接口,设置Content-Disposition: attachment指定默认文件名:

    var data = fs.readFileSync('/Users/my/Desktop/demo.pdf');
    res.contentType("application/pdf");
    res.setHeader('Content-Disposition', 'attachment; filename=my.pdf');
    res.send(data);
    
  3. 前端配合
    在PDF预览页面添加一个下载按钮,点击时请求上述下载接口,用户即可在预览后主动触发带默认文件名的下载。


方案二:利用浏览器PDF预览器原生功能(更简洁)

直接设置Content-Disposition: inline并指定文件名,浏览器会先预览PDF,当用户点击预览器内置的下载按钮时,会自动使用指定的默认文件名:

var data = fs.readFileSync('/Users/my/Desktop/demo.pdf');
res.contentType("application/pdf");
res.setHeader('Content-Disposition', 'inline; filename=my.pdf');
res.send(data);

说明:inline表示允许浏览器直接预览资源,同时附带的filename参数会被浏览器下载功能采纳,无需额外前端开发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:24:53