axios 用post方式下载excel

可能一般通过后台下载excel,会直接写在a标签的href中用get请求,直接返回文件流,浏览器会自动识别,
但是通过post下载可能有些问题需要注意
在axios请求中设置responseType的类型为blob,不然会乱码,这里可以打印出来看返回的类型,如果引入了mock.js,会改变后端传入的文件流,变成string类型,所以
重点是看一下返回的类型,设置的blob是否有效,是否被改变

export function DownloadDb(data) {
  return fetch({
    url: '/downloadExcel',
    method: 'post',
    data,
    responseType: 'blob'
  })
}
  DownloadDb({ title, values }).then(res => {
        const blob = new Blob([res], {
          type: 'application/vnd.ms-excel;charset=utf-8'
        })

        let fileName =
          '渠道报表' + parseTime(new Date(), '{y}-{m}-{d}') + '.xls'

        // fileDownload(res, fileName)
        if ('download' in document.createElement('a')) {
          // 非IE下载
          const elink = document.createElement('a')
          elink.download = 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)
        } else {
          // IE10+下载
          navigator.msSaveBlob(blob, fileName)
        }
      })

Object.keys() Object.values()无法保证对象的顺序输出

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容