当前位置: 首页 > news >正文

vue下载文件 (blob文件流) 及 下载失败报错信息处理

vue下载文件 (blob文件流) 及 下载失败报错信息处理

重点封装代码

// 引入axios
import axios from 'axios'
// 引入token的获取方法
import { getToken } from '@/utils/auth'
// 引入消息提示组件
import { Message } from 'element-ui'

// 导出文件--文件流格式
export function exportFlie(url, params) {
  axios.post(process.env.VUE_APP_BASE_API + `${url}`, params, { responseType: 'blob', headers: { 'X-Token': getToken() }})
    .then((res) => {
    //返回文件流,下载保存到本地
      const blob = new Blob([res.data], {
        type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'
      })
      const downloadElement = document.createElement('a')
      const href = window.URL.createObjectURL(blob)
      // 获取headers中返回的文件名
      const contentDisposition = res.headers['content-disposition'] // 从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
      const patt = new RegExp('filename="([^;]+\\.[^\\.;]+);*"')
      const result = patt.exec(contentDisposition)
      const filename = decodeURI(result[1])
      downloadElement.style.display = 'none'
      downloadElement.href = href
      downloadElement.download = filename // 下载后文件名
      document.body.appendChild(downloadElement)
      downloadElement.click() // 点击下载
      document.body.removeChild(downloadElement) // 下载完成移除元素
      window.URL.revokeObjectURL(href) // 释放掉blob对象
    }).catch(err => {
      // 接口报错,返回保存信息,因为设置responseType: 'blob',返回数据转为blob格式,所以使用FileReader()方法读取文件流,将错误信息转为json格式
      const reader = new FileReader()
      reader.readAsText(err.response.data, 'utf-8')
      reader.onload = (e) => {
        try {
          // 将读取到的文本解析为JSON对象
          const jsonData = JSON.parse(e.target.result)
          // 在这里使用解析后的JSON数据
          Message.error(jsonData.msg)
        } catch (error) {
          // 处理解析JSON时可能出现的错误
          console.error('Error parsing JSON:', error)
          Message.error('文件导出失败')
        }
      }
    })
}

封装公共方法

  1. utils文件下的index.js文件中创建工具类
export function exportFlie(){}

组件中使用

import { exportFlie } from '@/utils/index'

exportFlie(url, params)

相关文章:

  • Jetson Orin Nano Super Devkit开发板测评:边缘AI的性价比王者
  • 【Linux】进程信号——信号保存和信号捕捉
  • 直接用http请求调用别人的webservice服务 并且包含账号密码 解决使用Apache CXF 生产代码无法使用的问题 不使用
  • 【Java】IO流
  • 1358. 包含所有三种字符的子字符串数目
  • 复试准备日常
  • 什么是SYN洪范攻击?
  • 抖音DP代运营服务——品融电商赋能品牌增长
  • Python 调试pdb和-i模式
  • NodePort+LoadBalancer+Ingress+MetalLB+HostNetwork+Istio Gateway
  • 【神经网络】python实现神经网络(一)——数据集获取
  • 通俗的方式解释“零钱兑换”问题
  • 利用Python爬取中国气象局天气预报数据
  • ctf网络安全赛题
  • tsconfig.json 配置清单
  • C语言运算符优先级,简单样例理解
  • 从芯片到光网络:解密平面光波导技术(PLC)核心优势
  • 【IEEE/EI/Scopus检索】2025年3-4月传感器与信息技术、通信、软件、信号处理领域国际学术会议征稿开启!
  • 【0001】初识Java
  • 新豪轩荣登国货之光计划领航中国定制门窗发展新征程
  • 成都网站建设价格/搜索引擎优化教材答案
  • 网站建设计划书/八上数学优化设计答案
  • b2b免费发布网站大全排名/最近爆发什么病毒感染
  • 外网下载/网站搜索引擎优化的基本内容
  • 成功的微网站/中文域名注册官网入口
  • 青岛市城阳区建设局网站/网站seo批量查询工具