function fileDownload(url, type, data){
var sUrl = url + ‘?’;
var xhr = new XMLHttpRequest();
var token = localStorage.getItem(‘Access-token’)
for (var key in data){
sUrl += key + '=' + data[key] + '&'
}
xhr.open(type, sUrl, true);
xhr.setRequestHeader('Content-type', 'application/json');
xhr,setRequestHeader('accept','application/json;charset=utf -8')
xhr.serRequestHeader('access-token', token)
xhr.responseType = 'blob' // 让返回的类型为blob类型
xhr.onload = function () {
if (this.status === 200) {
var blob = this.response;
var link = document.creatElement('a')
var fileTitle = this.getResponseHeader('Content-Disposition') //这个是我们公司后端自己设定的文件名
link.herf = URL.createObjectURL(blob) //这是很重要的一步,将file文件内容转化成data: url
link.download = decodeURIComponent(
fileTitle.substr(fileTitle.indexof('=') + 1)
)
// decodeURIComponent是将codeURIComponent转码后的文件解码
//这个操作主要看后台返回的文件名类型的数据格式
ilnk.style.display = 'none';
document.getElementByTagname('Body')[0].appendChild(link)
//给body新增一个link元素,并让其隐藏起来
link.click()
//触发link的按钮,使其下载
link.remove()
//触发后删除该元素节点
}
}
xhr.send()
}
文件下载的关键几步如下:
- 将文件的返回类型改为blob对象,因为转码成data: url的时候,参数需要是blob
2.将返回的blob格式的文件转换成url, - 创建一个link节点并自动触发它