- 废话少说直接上代码 这边利用ajax和blob 模拟下载
export function downloadFile(url, data, filename, callback) {
const xhr = new XMLHttpRequest()
xhr.open('POST', url, true)
xhr.responseType = 'blob'
xhr.onload = ev => {
const currentTarget = ev.currentTarget || {}
if (currentTarget.status === 200 && currentTarget.readyState === 4) {
if (!filename) {
const disposition = xhr.getResponseHeader('Content-Disposition')
if (disposition && disposition.indexOf('attachment') !== -1) {
const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/
const matches = filenameRegex.exec(disposition)
if (matches != null && matches[1])
filename = matches[1].replace(/['"]/g, '')
}
}
const type = xhr.getResponseHeader('Content-Type')
const blob = new Blob([currentTarget.response], { type: type })
if (window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(blob, filename)
} else {
const URL = window.URL || window.webkitURL
const downloadUrl = URL.createObjectURL(blob)
if (filename) {
const a = document.createElement('a')
if (a.download === undefined) {
window.location = downloadUrl
} else {
a.href = downloadUrl
a.download = filename
document.body.appendChild(a)
a.click()
}
} else {
window.location = downloadUrl
}
setTimeout(() => {
URL.revokeObjectURL(downloadUrl)
}, 100)
}
}
callback && callback()
}
xhr.setRequestHeader('Content-type', 'application/json')
xhr.send(JSON.stringify(data))
}