前端下载文件问题之如何获取报错信息

问题:点击下载后。接口会生成并返回文件流。在极端情况下接口数据返回异常,需要抛出错误信息,比如后端拼接错误情况、空文件情况。
难点:responseType设置为Blob后,返回内容为二进制文件流,从而无法获取错误信息。文件流截图如下:
在这里插入图片描述
解决方法:FileReafer()方案解决,示例代码:


        if(res.data.success===undefined && res.data.type === 'application/json'){
   
          const fileReader = new FileReader()
          fileReader.readAsText(res.data,'utf-8')
          fileReader.onload = function(){
   
            const result = JSON.parse(fileReader.result)
            // 获取到接口json对象。
			// 	情况1:有返回msg和code码(通过和业务层协商获取),可根据result.code码,弹出result.msg提示语
			// 情况2: 返回正常,data为null,表明为空文件,弹窗提示为空文件取消下载。
          }
          return
        }

总结:
1.下载文件场景ResponseType:"blob"时,需要报错提示,通过new FileReader把返回的数据转成文件,从而读取错误信息;

2.文件下载的方法,组装成二进制流文件,通过content-disposition获取正确的中文件名。代码如下:

if (res.headers["content-disposition"]) {
   
    const fileName = decodeURIComponent(
      res.headers["content-disposition"].split("=")[1]
    );
    byteToFile(res.data, fileName);
    return true
  }

3.byteToFile,返回的文件流数据转化为路径,创建A标签,触发点击下载文件路径。

export const byteToFile = (data, fileName) => {
   
	  let blob = new Blob([data]); 
	  let url = window.URL.createObjectURL(blob); 
	  let aLink = document.createElement("a");
	  if (fileName) {
   
	    aLink.download = fileName;
	  }
	  aLink.href = url;
	  aLink.click();
}

;

相关推荐

  1. 关于根据url下载文件空格符

    2024-01-05 12:32:03       12 阅读
  2. nltk下载

    2024-01-05 12:32:03       9 阅读
  3. PHP信息

    2024-01-05 12:32:03       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-05 12:32:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-05 12:32:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-05 12:32:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-05 12:32:03       18 阅读

热门阅读

  1. 设计模式之观察者模式

    2024-01-05 12:32:03       33 阅读
  2. 类和对象及其关系

    2024-01-05 12:32:03       32 阅读
  3. TP-GMM

    TP-GMM

    2024-01-05 12:32:03      28 阅读
  4. 面试算法92:翻转字符

    2024-01-05 12:32:03       30 阅读
  5. Go语言断言和类型查询

    2024-01-05 12:32:03       38 阅读
  6. 16.Linux Bash Shell通过`read`命令读取用户输入

    2024-01-05 12:32:03       42 阅读
  7. python 堆栈

    2024-01-05 12:32:03       25 阅读