前端接收二进制流的方式实现下载(get & post)

2 篇文章 0 订阅
2 篇文章 1 订阅

传送门

第一步要设置responseType(注意是和headers同级的属性)

//请求头要设置这个:注意不是在headers里面
 {
 		headers: {'Content-Type': 'application/join'}, 
      	responseType: 'blob' // 注意不是在headers里面
    }

第二步

使用ajax请求文件获得二进制流,得到的二进制流传入下面的方法中即可完成下载

    exportReport(data) {
      try {
        var blob = new Blob([data], {
        // 制定mime值
          type: "application/vnd.ms-excel;charset=utf-8" // ms-office excel专用
          // 或者 'application/force-download' (万能type,强制下载)
        });
        
	    {
	    // 第一种生成url的方法
	    // 可以执行
		    let file = new FileReader();
		    file.readAsDataURL(blob);
		    file.onload = function (e) {
		      	console.log(e.target.result);
		      	let url = e.target.result
	     	 	let aLink = document.createElement("a");
		        aLink.href = url;
		        aLink.setAttribute("download", "用户列表.xls");
		        aLink.click();
		    };
	    }
	    {
	    //第二种生成url的方法
	    //可以执行
	        var url = window.URL.createObjectURL(blob);
	        var aLink = document.createElement("a");
	        aLink.href = url;
	        aLink.setAttribute("download", "用户列表.xls");
	        aLink.click();
	        window.URL.revokeObjectURL(url); //释放掉blob对象
	    }
 
      } catch (error) {
        console.error(error);
      }
    },
    //两个都可以,2选1

获取请求头Content-Disposition设置文件名称:

function resolveHeaderFileName(res){
   if(!res.headers['content-disposition']){
     return "";
   }
  let fileName=decodeURI(res.headers['content-disposition'].split(';')[1]).replace('filename=','');
  return fileName;
}
// 如果出现ajax响应头中存在content-disposition,但前端获取不到的情况,请联系后端设置:
// Access-Control-Expose-Headers = Content-Disposition
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值