问题
有个下载 tar.gz 包的需求,一开始使用正常的 axios 请求转 blob 的方式做的,结果在遇到下载 tar.gz 的时候发现无法打开,提示格式不支持。找了好多办法最后找到了如下方案。
解决方案
axios({
method: 'get',
url: '/api/download?format=tar.gz',
headers: {
'Content-Type': 'application/json; application/octet-steam',
},
responseType: 'blob', // 重点在于此
}).then(response => {
let data = response.data
const fileName = `PACKAGE-${new Date().valueOf()}`
downloadTargz(data, fileName, 'tar.gz')
})
附上下载 tar 包的代码:
function downloadTargz (content, fileName, suffixName) {
const blob = new Blob([content], {
type: 'application/x-tar',
})
const url = window.URL.createObjectURL(blob)
const a = document.createElement('a')
a.href = url
a.download = fileName + '.' + suffixName
a.click()
}
最后
必须 axios 中加上 responseType: blob
这个参数!!!
必须 axios 中加上 responseType: blob
这个参数!!!
必须 axios 中加上 responseType: blob
这个参数!!!
网友评论