问题描述:
在后台正常处理后生成Excel,但是发生异常或者错误时,前端无法提示
解决方法:
查看下面代码中的返回的res和blob打印信息,由于获取返回信息里的code比较麻烦,对比正常情况和错误的情况,发现:如果后台正常返回,则blob中text内容不是json,如果异常则可以解析成json,于是,从此处入手,如果解析异常说明后端返回成功!
代码如下
upload1 (url, formData) {
return service({
url,
method: 'POST',
responseType: 'blob',
timeout: 0,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
data: formData
}).then(res => { // 处理返回的文件流
const blob = new Blob([res])
console.log(blob)
blob.text().then(result => {
try {
const jsonData = JSON.parse(result)
if (jsonData.code && jsonData.msg) {
alert(jsonData.msg)
} else {
alert('返回失败')
}
} catch (e) {
const fileName = '核算明细' + new Date().toLocaleDateString() + '.xlsx'
// 兼容IE
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName)
} else {
const elink = document.createElement('a')
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)
}
}
// console.log(result)
// 转换Unicode编码至中文
// const resultStr = unescape(result.replace(/\\/g, "%"))
// alert(resultStr)
// console.log(resultStr)
// console.log(typeof resultStr)
})
})
}