【前端下载二进制文件的两种方法】

1.使用form表单下载

form表单方式下载的文件名字是后台默认的

export function postDownloadFile(url, params){
  console.log(url, params)
  let form = document.createElement("form");
  form.setAttribute("style", "display:none;");
  form.setAttribute("method", "post");
  form.setAttribute("action", url);

  if(params){
    Object.keys(params).forEach(key=>{
      if(Array.isArray(params[key])){
        // value_list = []
        params[key].forEach(value=>{
          let input_item = document.createElement("input");
          input_item.name = key;
          input_item.value = value;
          form.appendChild(input_item);
        })
      }else{
        let input_item = document.createElement("input");
        input_item.name = key;
        input_item.value = params[key];
        form.appendChild(input_item);
      }
    })
  }
  console.log('----------------------form', form)
  document.body.appendChild(form);
  //根据需求是否添加
  // let windowName = 'Download(' + (new Date().getTime()) + ')';
  // let w = window.open('', windowName);
  form.target = '_blank';
  form.submit();
  form.remove();
  // w.close();
}

2.a标签下载

接口设置

{
    responseType:'blob',
    headers:{ 'Content-Type': 'application/json; application/octet-stream'}
}

下载

let blob = new Blob([response.data], {type: "application/vnd.ms-excel"})
let url = URL.createObjectURL(blob)
let link = document.createElement('a')
//不设置导出文件名时,导出的文件名是乱码
link.download = '自定义文件名.文件格式'
link.href = url
link.click()
link.remove()

不设置文件名时下载的文件,如下图

在这里插入图片描述

a标签下载文件可通过headers获取文件名

let filename = res.headers["content-disposition"].split('filename=')[1]

需要后端设置并放开

response.setHeader("Access-Control-Expose-Headers", "content-disposition");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值