最近有一个下载文件的需求,后端有数据时返回文件流,没有数据时返回json,前端抛出错误提示
下载接口请求设置为 responseType: ‘blob’,后端返回的json也被转成blob
解决办法:
let param = {
type:'20210608'
}
downReport(param).then( async res => {
if (res.data.type.indexOf('application/json') != -1){
//Blob.text()返回一个promise且包含blob所有内容的UTF-8格式的 USVString。
let text = await res.data.text();
let jsonText = await JSON.parse(text)
console.log(jsonText)
this.$notify.error({title:'错误',message:jsonText.msg})
}else{
let type = res.headers['content-type']
let disposition = res.headers['content-disposition']
let fileName = disposition.split(';')[1].split('=')[1]
let blob = new Blob([res.data],{
type:type
})
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName)
} else {
var link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = fileName
link.click()
window.URL.revokeObjectURL(link.href)
}
}
})