前端下载文件blob 错误json处理

843 阅读1分钟

axios请求{ responseType: 'blob' } 判断返回type是否是application/json格式 如果是则是报错信息 如果不是则按照下载流程走 `

export function downLoadFile(url, requestData = {}) {
  // 响应类型:arraybuffer, blob
  axios
.post(url, requestData, { responseType: 'blob' })
.then((resp) => {
  const headers = resp.headers;
  const contentType = headers['content-type'];
    if (!resp.data) {
    console.error('响应异常:', resp);
    return false;
  } else {
    if (resp.data.type == 'application/json') {
      const reader = new FileReader();
      reader.onload = function () {
        const resJson = JSON.parse(reader.result);
        if (resJson.message || resJson.msg) {
          ElMessage({
            message: resJson.message || resJson.msg,
            type: 'error'
          });
          return;
        }
        //处理错误
      };
      reader.readAsText(resp.data);
    } else {
      const blob = new Blob([resp.data], { type: contentType });
      
      const contentDisposition = resp.headers['content-disposition'];
      let fileName = 'unknown';
      if (contentDisposition) {
        fileName = window.decodeURI(
          resp.headers['content-disposition'].split('=')[1]
        );
      }
      console.log('文件名称:', fileName);

      // 非IE下载
      if ('download' in document.createElement('a')) {
        const link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob); // 创建下载的链接
        link.download = fileName; // 下载后文件名
        link.style.display = 'none';
        document.body.appendChild(link);
        link.click(); // 点击下载
        window.URL.revokeObjectURL(link.href); // 释放掉blob对象
        document.body.removeChild(link); // 下载完成移除元素
      } else {
        // IE10+下载
        window.navigator.msSaveBlob(blob, fileName);
      }
    }
  }
})
.catch(function (error) {

  console.log(error);
});}`