其他分享
首页 > 其他分享> > 文件流转换(一般用于axios设置接收文件流设置时responseType: 'blob')

文件流转换(一般用于axios设置接收文件流设置时responseType: 'blob')

作者:互联网

  文件流转换

一般用于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)       }     }   } }

标签:文件,axios,elink,newRes,blob,设置,const,document,data
来源: https://www.cnblogs.com/sws-kevin/p/14993873.html