一、ajax原生 (vue)
var xhr = new XMLHttpRequest()
xhr.open('get', '可以直接下载文档的完整路径链接')
xhr.responseType = 'blob'
xhr.send()
xhr.onload = function () {
if (this.status === 200 || this.status === 304) {
const fileReader = new FileReader()
fileReader.readAsDataURL(this.response)
fileReader.onload = function () {
const a = document.createElement('a')
a.style.display = 'none'
a.href = this.result
a.download = '模板'
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
}
}
}
二、axios请求(vue)
url: '接口地址',
method: 'get',
responseType: 'arraybuffer', // 原生用blob,axios请求用arraybuffer
callBack: res =>{
var blob = new Blob([res], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'})
const fileName = '模板' // excel表格名字
const elink = document.createElement('a')
if ('download' in elink) { // 非IE下载
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
} else { // IE10+下载
navigator.msSaveBlob(blob, fileName)
}
}
三、a标签(vue、react)
<a download href={`xlsx文件完整路径(.xlsx)`}>下载模板</a>
四、react
function downloadFile(data, fileName, fileType) {
// 创建一个Blob对象,表示二进制数据
const blob = new Blob([data], { type: fileType });
// 创建一个虚拟链接
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
// 设置下载文件的名称
a.download = fileName;
// 将虚拟链接添加到文档中
document.body.appendChild(a);
// 模拟点击链接以触发下载
a.click();
// 移除虚拟链接
document.body.removeChild(a);
}
downloadFile(data, 文件名称, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')