前后端实现下载文件,nodejs

 node

app.post("/downfileTest", (req, res, next) => {
  let filePath = __dirname + "/file/" + "可爱捏.mp4";
  let f = fs.createReadStream(filePath);
  let name = "tes11111111111t.mp4";
  res.header( // 设置前端可访问响应头对应字段
    "Access-Control-Expose-Headers",
    "Other-Data, Your-Custom-Header2"
  );
  res.writeHead(200, {
    "Content-Type": "application/force-download",
    "Content-Disposition": "attachment; filename=" + "test.mp4",
    "Other-Data": name,
  });
  f.pipe(res);
});

前端

let btn = document.querySelector('#btn')
        btn.addEventListener('click', () => {
            fetch('http://127.0.0.1:3000/downfileTest', {
                method: 'post',
                responseType: 'blob'
            }).then(res => {
                let name = res.headers.get('Other-Data')
                return res.blob().then(res => { //异步读取
                    var blob = new Blob([res]);
                    var url = window.URL.createObjectURL(res);
                    var a = document.createElement("a");
                    a.href = url;
                    a.download = name;// 这里指定下载文件的文件名
                    a.click();
                    window.URL.revokeObjectURL(url);
                })
            }).catch(err => {
                console.log(err)
            })
        })

顺便说一下,最好用xhr或者xhr封装,fetch我本身不太熟悉,但是懒得引入,浪费了很多时间😅,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值