前端启示录让前端飞零基础转行前端

Vue3-将流数据转换为文件并实现自动下载

2021-09-27  本文已影响0人  前端辉羽

具体需求:后端接口返回流数据,前端根据接口拿到的流数据转换为excel表格
后端接口返回数据示例:


image.png

注意:流数据可以被转换为exel表格是项目的具体需求,是和后端约定好的
因为需要手动改变axios的contentType和responseType,所以要单独处理这次请求,将其封装成一个hooks

import axios from 'axios'
import { ElMessage } from 'element-plus'

const exportAnalysisHooks = (url) => {
  axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
  axios.defaults.responseType = 'blob'
  axios
    .post(
      url,
      {},
      {
        headers: {
          Authorization: window.localStorage.getItem('analysis_platform_accessToken') || '',
        },
      }
    )
    .then((res) => {
      const blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
      const fileName = decodeURI(res.headers['content-disposition'])
      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)
      }
    })
    .catch((err) => {
      console.log(err.response)
      ElMessage.error(err.response.data.message || '请求失败')
    })
}
export default exportAnalysisHooks

调用的时候传入url参数就可以了

import exportAnalysisHooks from '../../hooks/exportAnalysisHooks'
//调用
exportAnalysisHooks(url)
上一篇下一篇

猜你喜欢

热点阅读