axios导出文件时二进制流处理

2024-12-30  本文已影响0人  男人宫
 if (Reflect.has(response.headers, 'content-disposition')) {
 //如果是二进制流,获取二进制流文件
        
 DownloadBlob(response, resolve)
       
} else {
 //如果没有导出任何东西,后台返回json,强转json,并给用户提示报错
   
  BlobToJson(response.data, resolve)
  
  }

文件流处理

function DownloadBlob({ headers, data }, resolve) {
    let downloadName
    if (headers['content-disposition'] && headers['content-disposition'].includes('attachment;filename=')) {
        downloadName = headers['content-disposition'].split('attachment;filename=')[1]
    }
    const type = headers['content-type']
    const blob = new Blob([data], { type })
    let dowloadUrl = window.URL.createObjectURL(blob)
    if (downloadName) {
        resolve({
            url: dowloadUrl,
            name: decodeURI(downloadName)
        });
    } else {
        resolve({
            url: dowloadUrl,
        });
    }
}

json处理

function BlobToJson(data, resolve) {
    let r = new FileReader()
    r.onload = function() {
        try {
            let resData = JSON.parse(this.result)
            if (resData) {
                // console.log("文件错误信息", resData);
                Vue.prototype.$message({
                    showClose: true,
                    message: resData.msg,
                    type: 'error'
                });
                resolve({
                    message: resData.message,
                    status: resData.status
                });
            }
        } catch (err) {
            // console.log("文件错误", err);
            Vue.prototype.$message({
                showClose: true,
                message: err,
                type: 'error'
            });
            resolve({
                message: err,
                status: 10030
            });
        }
    }
    r.readAsText(data)
}

上一篇 下一篇

猜你喜欢

热点阅读