使用 new FileReader 读取返回,如下
let reader = new FileReader()
reader.readAsText(response.data, 'utf-8')
reader.onload = (e) => {
try {
let result = JSON.parse(e.target.result)
resolve(result)
} catch (err) { // 正常下载
resolve(response)
}
}
如果是返回的json, 就可以执行 JSON.Parse, 返回, 如果是文件流, 就 catch, 直接返回去下载.
完整代码如下, 记录一下, 避免忘记, 因为涉及参数加密, 会有些多余的代码,仅供参考
export function fetchDownLoad (url, param) {
return new Promise((resolve, reject) => {
getconfig(1, param)
let paramAes
if (instance.defaults.headers.common['isLock']) {
paramAes = encryption.aes.en(JSON.stringify(param))
} else {
paramAes = param
}
instance.post(url, paramAes, {responseType: 'blob'}).then(response => {
if (instance.defaults.headers.common['isLock']) { // 加密
let reader = new FileReader()
reader.readAsText(response.data, 'utf-8')
reader.onload = (e) => {
try {
let result = encryption.aes.de(JSON.parse((e.target.result)))
result = JSON.parse(result)
resolve(result)
} catch (err) { // 正常下载
resolve(response)
}
}
} else { // 不加密
let reader = new FileReader()
reader.readAsText(response.data, 'utf-8')
reader.onload = (e) => {
try {
let result = JSON.parse(e.target.result)
resolve(result)
} catch (err) { // 正常下载
resolve(response)
}
}
}
}, err => {
reject(err)
}).catch((err) => {
reject(err)
})
})
}