美文网首页
二进制流下载及后台返回对象的报错信息展示问题

二进制流下载及后台返回对象的报错信息展示问题

作者: 辉色星空下 | 来源:发表于2024-04-14 17:09 被阅读0次

正常在使用axios接口封装后。碰到需要下载文件的接口,我们都需要一个添加一个responseType: "blob"的参数,如果正常返回的话是没有问题的,但是如过报错,然后需要使用后端返回的提示信息,不能使用自己的提示信息那么修改如下:

 exportFile(res, headers,selfError) {
      if (Object.prototype.toString.call(res) === "[object Blob]") {
        const fileReader = new FileReader();
        fileReader.onload = function (e) {
          try {
            const blob = new Blob([res]);
            const fileName = headers["content-disposition"].match(
              /filename="(\S*)"/
            )
              ? headers["content-disposition"].match(/filename="(\S*)"/)[1]
              : headers["content-disposition"].match(/filename="?(\S*)"?/)[1];
            // console.log(fileName);
            if (window.navigator && window.navigator.msSaveOrOpenBlob) {
              navigator.msSaveBlob(blob, fileName);
            } else {
              // return;
              const elink = document.createElement("a");
              elink.download = decodeURIComponent(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);
            }
          } catch (err) {
            //这里是关键start
            //使用后台返回的错误信息
            if(selfError){
              let errorMessage = JSON.parse(fileReader.result).message;
              Message({
                type: "warning",
                message: errorMessage,
              });
            //end
            }else{
              //使用自定义的错误信息
               Message({
                type: "warning",
                message: "导出失败",
              });
            }
              
           
          }
        };
        fileReader.readAsText(res);
      }
    },

相关文章

网友评论

      本文标题:二进制流下载及后台返回对象的报错信息展示问题

      本文链接:https://www.haomeiwen.com/subject/xxerxjtx.html