文件流转换
一般用于axios设置接收文件流设置时responseType: 'blob'当接口报错时,前端因已设置responseType: 'blob'无法再接收json格式数据,会把json格式数据转为blob格式,而到了这里拦截器已无法识别blob进而无法对blob数据进行拦截,这个时候就需要前端将数据blob格式进行转换成正常的json的数据,这会导致前端无法显示报错信息
/** * 文件流转换 主要代码块,可自定义下载文件名称 * @param {} data */ export function download(data, titName) { var reader = new FileReader() reader.readAsText(data, 'utf-8') reader.onload = function() { try { const newRes = JSON.parse(reader.result) // 获取blob数据转换为json后的数据,即后台返回的原始数据 if (!newRes.success) { if (newRes.code === '407') { MessageBox.confirm(newRes.message, i18n.t('tips.confirmlogout'), { confirmButtonText: i18n.t('btn.loginagain'), cancelButtonText: i18n.t('btn.cancel'), type: 'warning', duration: 0, showClose: true }).then(() => { store.dispatch('user/resetToken').then(() => { location.reload() }) Promise.reject() }).catch(err => { return Promise.reject(err) }) } else { Notification.error({ title: 'Server Error', message: newRes.message, duration: 0, showClose: true }) } } } catch (err) { if (!data) { return } const content = data const blob = new Blob([content], { type: 'application/vnd.ms-excel' }) const fileName = titName || 'EXCEl.xls' if ('download' in document.createElement('a')) { // 非IE下载 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) } else { // IE10+下载 navigator.msSaveBlob(blob, fileName) } } } }