记录:下载时,返回二进制流和json格式分别处理方式

2022-07-29  本文已影响0人  一个健康马
getFiles(_path, query) {
    axios({
      method: 'get', // 请求方式
      headers: {
        'Content-Type': 'application/octet-stream',
        'token': store.getters.token
      },
      url: _path, // 请求路径
      params: query,
      responseType: 'blob'
    }).then(res => {
      const data = res.data;
      if (res.data.type == 'application/json') {     // json信息展示
        this.handlerResponseError(data);
      } else {
        // 下载文件流
        const filename = this.getCaption(res.headers['content-disposition']);
        const blob = new Blob([res.data], {
          type: 'application/octet-stream'
        });
        const objectUrl = URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = objectUrl;
        link.setAttribute('download', filename);
        document.body.appendChild(link);
        link.click();// 点击
        document.body.removeChild(link); // 下载完成移除元素
        window.URL.revokeObjectURL(URL); // 释放掉blob对象
      }
    }).catch((err) => {
      console.log(err, 'err');
    });
  },

  handlerResponseError(data) {
    const _this = this;
    const fileReader = new FileReader();
    fileReader.onload = function() {
      try {
        const jsonData = JSON.parse(fileReader.result); // 说明是普通对象数据,后台转换失败
        console.log('后台返回的信息',jsonData.msg);
       // dosomething……
      } catch (err) { // 解析成对象失败,说明是正常的文件流
        console.log('success...');
      }
    };
    fileReader.readAsText(data);
  },
上一篇下一篇

猜你喜欢

热点阅读