Bootstrap

jquery ajax、 axios 下载文件

用多了axios 的下载文件,突然使用原生的有点蒙;jquery 中的$.ajax()  是使用不了的,具体原因:【记录避坑AJAX处理文件流】为什么预览/下载文件是空白的?(含过程和解决方法)_jquery ajax下载文件流-CSDN博客 所以直接使用XMLHttpRequest原生写吧。

let url = '/client/down/downFile?id='+item.id;   // 后端接口
					let xhr = new XMLHttpRequest();
					xhr.open('GET', url, true);        // 也可以使用POST方式,根据接口
					xhr.responseType = "blob";    // 返回类型blob
					xhr.setRequestHeader('Authorization',"clientBearer " + window.localStorage.getItem("token"))    // 请求头 多个再加 xhr.setRequestHeader()
					xhr.onload = function () {
						if (this.status === 200) {
							let blob = this.response;
							that.mySelfFileDown(blob,"文件.pdf")
						}
					};
					// 发送ajax请求
					xhr.send()

	mySelfFileDown:function (res,name) {
				try{
					let	fileName = name
					if(!name){
						try{
							fileName = res.headers["content-disposition"].split("=")[1];
							fileName = decodeURI(fileName); //文件名称解码
							fileName = fileName.replace(/\+/g, ""); //文件名称修改
						}catch (err){
							fileName = "文件"
						}
					}

					if (window.navigator.msSaveOrOpenBlob) { // IE
						var objectUrl = new Blob([res.data], { type: 'application/pdf'})

						navigator.msSaveBlob(objectUrl, fileName)
					} else { // 主流浏览器
						let objectUrl = URL.createObjectURL(new Blob([res]));
						const link = document.createElement('a');
						link.download = fileName;
						link.href = objectUrl;
						link.click();
					}

				}catch(err){
					console.log(err,"======err======")
				}
        	},

;