当前位置:   article > 正文

浏览器下载blob文件流(兼容IE浏览器和其他主流浏览器)_blob链接用什么软件可以下载

blob链接用什么软件可以下载

在vue项目中,一般会使用axios做ajax请求,此时会封装响应拦截器,一般约定 response.data.code === '000000' 时响应通过,但是在服务端返回文件流时,是没有 response.data.code 的值,此时响应就会被拦截,考虑使用其他字段进行响应成功的判断,经过检查发现,在文件流下载需求中,会有对象的响应类型response.data.type,我们的需求中是下载excel文件,使用的文件类型是 application/vnd.ms-excel(IE浏览器上是 application/vnd.ms-excel;charset=utf8,其他主流浏览器中是 application/vnd.ms-excel),所以拦截器里面判断

if(response.data.code == '000000' || response.data.type.indexOf('application/vnd.ms-excel') > -1) {
	// 响应成功时候的操作
}else {
	// 响应不成功时候的操作
}
  • 1
  • 2
  • 3
  • 4
  • 5

以上是对axios响应拦截器封装的修改

在业务操作中,因为ie浏览器有独立于其他浏览器的下载文件方式,所以要做如下判断

axios({
	url: *****download,
	responseType: "blob",
    method: "post",
    data: {
    	// 自己业务的参数
    },
}).then((res) => {
	// 如果有res,代表服务端正常返回了文件流
	if(res) {
		//拆解获取文件名,
		let let _filename = res.headers["content-disposition"].split(";")[1].split("=")[1]; 
		if('msSaveOrOpenBlob' in navigator) {
			//ie使用的下载方式
			window.navigator.msSaveOrOpenBlob(res.data, decodeURI(_filename));
		}else {
			// 其他浏览器的下载方式
			// 创建一个隐藏的 a 标签
			const link = document.createElement("a");
			// let blob = new Blob([res.data],{ type: "application/vnd.ms-excel"}); // 文件流处理
			let blob = new Blob([res.data], {
				type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
			}); // 文件流处理
			link.style.display = "none"; // 去掉 a 标签的样式
			// 设置链接
			link.href = URL.createObjectURL(blob);
			link.download = decodeURI(_filename);
			document.body.appendChild(link);
			// 模拟点击事件
			link.click();
			// 移除创建的 a 标签
			window.URL.revokeObjectURL(link.href);
			document.body.removeChild(link);
		}
	}
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/145222
推荐阅读
相关标签
  

闽ICP备14008679号