window location herf=""的方式换成用get请求下载文件

window.location.href换成用get请求下载文件

  • 我们一般是用window.location.href 的方式下载文件对象,但是这样前端界面就不知道什么时候后台才把数据封装好,如果数据量过大的时候,界面就会出现按钮点击了,但是界面不动的假死现象,这样我们就需要使用获取文件流的方式让js获取数据去下载,在这期间,js就能很好的进行相应的处理反馈;
//一般的方式
window.location.href = "api/v1/download";
//修改后的方式
axios({
 method: 'get',//请求方式
  headers: {
    'Content-Type': 'application/vnd.ms-excel',
  },
  url: "api/v1/download/name",//请求路径
  responseType: 'blob'
}).then(res => {
    const blob = new Blob([res.data], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8',
    });
    const objectUrl = URL.createObjectURL(blob);
    const link = document.createElement('a');//我们用模拟q标签点击事件
    const fname = 'demo列表'; //下载文件的名字
    link.href = objectUrl;
    link.setAttribute('download', fname);
    document.body.appendChild(link);
    /**
    * 在这期间,我们可以做自己界面的反应逻辑
    **/
    link.click();//点击
    document.body.removeChild(link); // 下载完成移除元素
    window.URL.revokeObjectURL(URL); // 释放掉blob对象
  })
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值