一个没能解决的问题(2022.09.23已解决)

142 阅读1分钟

记一个还没解决的bug

import request from 'umi-request'

request('http://192..../shop/export', {
      method: 'POST',
      data: payload,
      params: { access_token: accessToken, shop_id: shopId },
      responseType: 'blob'  // 转blob
    })
      .then(res => {
        console.log('inter----') // 没进then
        const blob = new Blob([res], { type: "application/msexcel" });
        const objectURL = URL.createObjectURL(blob);
        let btn = document.createElement('a');
        btn.download = '文件.xls';
        btn.href = objectURL;
        btn.click();
        URL.revokeObjectURL(objectURL);
        btn = null;
      })
      .catch(error => {
        console.error('error---', error)
      })

request.png

bug.png

使用post的方式去请求数据流,再下载到本地,现在状况能够请求到数据,但是没进then就报错了, 报错的原因是JSON的转化过程发生了错误,已经配置了responseType: 'blob',但是没有用.

解决办法:需要先把返回的数据处理成一下

let fileName = response&&response.headers&&response.headers['content-disposition']||''
let index = fileName.indexOf('FileName=')
fileName = decodeURI(fileName.slice(index + 9))||''
return Promise.resolve({data:resultData,fileName})