Nodejs 向前端响应 pdf 文件流

需求是用户在前端点击一个按钮下载储存在服务器那边的 pdf 文件

以下是前后端分离的解决方法

前端部分:

首先需要 downloadjs 依赖

npm install downloadjs

向后端发送 ajax 请求。结合自己的需求,我这里是点击按钮后发起

axios
  .get('http://127.0.0.1:1919/api/getpdf',{
    headers: {
      'Content-Type': "multipart/form-data"
    },
    responseType: 'blob'
  })
  .then((res) => {
    download(new Blob([res]), 'test.pdf', 'application/pdf');
  })
  .catch((err) => console.log(err))

注意一定要设置 responseType 为 blob,否则得到的 pdf 内容是空白的

后端 nodejs 部分:

router.get('/getpdf', (req, res) => {
    let filePath = path.resolve(__dirname, '../', 'pdfs', 'Web应用开发组竞赛规则及说明.pdf');
    let fileStream = fs.createReadStream(filePath);
    let stat = fs.statSync(filePath);
    res.setHeader('Content-Length', stat.size);
    res.setHeader('Content-Type', 'application/pdf');
    res.setHeader('Content-Disposition', 'attachment; filename=haha.pdf');
    fileStream.pipe(res);
})

其中 filePath 是服务器端的文件路径,与前端无关

结果

可成功下载

并且内容正常显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值