
使用Axios进行文件下载(文件流)
axios download
·
export const downloadFile = (url, data) => {
return axios({
url,
method:'POST',
data,
responseType: 'blob',
headers: {
'X-Token': localStorage.getItem('token') || '',
},
})
.then(res => {
console.log(res)
const str = res.headers['content-disposition']
if (!res || !str) {
error(res.message || '下载失败!')
return
}
if (res && res.status === 200 && res.data) {
const { data, headers } = res
// // 切割出文件名
// const fileNameEncode = res.headers['content-disposition'].split('filename=')[1]
// // 解码
// const fileName = decodeURIComponent(fileNameEncode)
// console.log('fileName', fileName)
let fileName
if (headers['content-disposition']) {
fileName = headers['content-disposition'].replace(/\w+;filename=(.*)/, '$1')
} else {
fileName = data.fileName
}
// 此处当返回json文件时需要先对data进行JSON.stringify处理,其他类型文件不用做处理
const blob = new Blob([data], { type: headers['content-type'] })
const dom = document.createElement('a')
const downUrl = window.URL.createObjectURL(blob)
dom.href = downUrl
dom.download = decodeURIComponent(fileName)
dom.style.display = 'none'
document.body.appendChild(dom)
dom.click()
dom.parentNode.removeChild(dom)
window.URL.revokeObjectURL(url)
} else {
error(res.message || '下载失败!')
}
})
.catch(err => {
error(err || '下载失败!')
})
}
更多推荐
所有评论(0)