AJAX请求返回流 下载Excel文件
// 模拟请求
var xhr = new XMLHttpRequest()
// 文件名称
var fileName = '1.xls';
xhr.open('POST', "http://127.0.0.1:8001/Api/DownloadFile/Download", true)
// 头部添加自定义的参数,比如:token
xhr.setRequestHeader("token", "6f20c4ce56bb4b679769674be9a710e1453")
xhr.setRequestHeader("Content-Type", "application/json")
// 设置响应类型
xhr.responseType = 'blob'
// 请求参数
xhr.send(JSON.stringify({
downloadType: 10,
CheckNo: "20220811114232637196252"
}))
// 响应
xhr.onload = function () {
if (this.status==200) {
var type = xhr.getResponseHeader('Content-Type')
// 二进制流转换blob类型
var blob = new Blob([this.response], { type: type })
if (typeof window.navigator.msSaveBlob !== 'undefined') {
window.navigator.msSaveBlob(blob, fileName)
} else {
// 兼容
var URL = window.URL || window.webkitURL
// 将Blob类型转为资源链接,就是a链接的href属性的值
var objectUrl = URL.createObjectURL(blob)
if (fileName) {
var a = document.createElement('a')
if (typeof a.download === 'undefined') {
window.location = objectUrl
} else {
a.href = objectUrl
// 给a链接中属性download赋值,命名文件名称
a.download = fileName
document.body.appendChild(a)
// 模拟自发点击,以及移除
a.click()
a.remove()
}
} else {
window.location = objectUrl
}
// 释放资源
window.URL.revokeObjectURL(objectUrl);
}
}
}