前端实现下载
有时候后台管理需要导出功能,a 标签默认会打开新页面,此方法使用 dom 操作在当前页 面创建下载链接并点击下载
//下载任务文件事件 url 为下载地址
function downloadFiles(url, name) {
const aLink = document.createElement('a') //创建a链接
aLink.style.display = 'none'
aLink.href = url
aLink.download = name
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink) //点击完成后记得删除创建的链接
},
//当后台返回的不是下载地址,而是文件的 blob 格式对象时
//注意 blobObj 为 blob 格式对象!!!
// 方法1:
function downloadFiles(blobObj,fileName){
const tempBlob = URL.createObjectURL(blobObj)
const aLink = document.createElement('a')
aLink.href = tempBlob
aLink.download = fileName
aLink.click()
URL.revokeObjectURL(tempBlob)
}
// 方法2:
function downloadFiles(blobObj, fileName) {
const reader = new FileReader()
reader.readAsDataURL(blobObj)
reader.onload = (e) => {
const aLink = document.createElement('a')
aLink.style.display = 'none'
aLink.href = e.target.result
aLink.download = 'fileName'
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink) //点击完成后记得删除创建的链接
}
}举例,下载 application/vnd.ms-excel 格式文件
当请求返回的是 application/vnd.ms-excel 类型的数据时,发送 XMLHttpRequest 请求时,注意设置 responseType 为 blob
Last updated
Was this helpful?