vue2 使用axios 请求后台返回文件流导出为excel

目录

[步骤 1: 安装 Axios](#步骤 1: 安装 Axios)

[步骤 2: 创建 Axios 实例](#步骤 2: 创建 Axios 实例)

[步骤 3: 发起请求并处理文件流](#步骤 3: 发起请求并处理文件流)

说明


步骤 1: 安装 Axios

首先,确保项目中已经安装了 Axios。如果没有,可以通过以下命令进行安装:

bash 复制代码
npm install axios

步骤 2: 创建 Axios 实例

为了更好地管理 Axios 配置,可以创建一个 Axios 实例。例如,在 src 目录下创建一个 axiosInstance.js 文件:

javascript 复制代码
import axios from 'axios';

const axiosInstance = axios.create({
  baseURL: 'http://your-api-base-url.com', // 替换为你的后端 API 基础 URL
  responseType: 'blob' // 设置响应类型为 blob
});

export default axiosInstance;

步骤 3: 发起请求并处理文件流

在 Vue 组件中使用这个 Axios 实例发起请求,并处理返回的文件流以导出 Excel 文件。

例如,在 src/views/user/index.vue 文件中:

javascript 复制代码
<template>
  <div>
    <button @click="downloadExcel">导出 Excel</button>
  </div>
</template>

<script>
import axiosInstance from '@/axiosInstance';

export default { 
  methods: {
    async downloadExcel() {
      try {
        const response = await axiosInstance.get('api地址', {
          params: {
           //传入查询参数
          }
        });

        // 创建一个 blob 对象
        const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' });

        // 创建一个链接元素
        const link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = 'exported-file.xlsx'; // 设置下载文件名
        link.click();

        // 释放 URL 对象
        window.URL.revokeObjectURL(link.href);
      } catch (error) {
        console.error('导出excel失败', error);
      }
    }
  }
};
</script>

说明

  1. 配置 Axios 实例 :我们创建了一个 Axios 实例并将 responseType 设置为 blob,以便 Axios 将响应数据处理为文件流。

  2. 发起请求 :在 downloadExcel 方法中,我们使用 axiosInstance.get 方法发起 GET 请求。如果需要传递查询参数,可以通过 params 选项传递。

  3. 处理文件流 :请求成功后,我们将响应数据创建为一个 Blob 对象,并将其类型设置为 application/vnd.ms-excel。然后,我们创建一个临时的链接元素,设置其 href 属性为 Blob 对象的 URL,并调用 click 方法触发下载。下载完成后,释放 URL 对象以避免内存泄漏。

相关推荐
liangshanbo121515 小时前
Webpack 文件指纹面试题整理
前端·webpack·node.js
liangshanbo121516 小时前
Webpack 常见 Plugin 面试题
前端·webpack·node.js
liangshanbo121517 小时前
Webpack Tree Shaking 面试题整理
前端·webpack·node.js
搬砖的小码农_Sky18 小时前
AI Agent:Node.js和浏览器运行环境的本质区别
javascript·node.js·人机交互
李游Leo19 小时前
HarmonyOS 7 ArkTS + Node.js:把权限声明、运行时授权与隐私文案做成提审前一致性扫描【鸿蒙心迹】
华为·node.js·harmonyos
liangshanbo121520 小时前
Webpack的分包策略面试题
前端·webpack·node.js
搬砖的小码农_Sky1 天前
AI Agent:Windows上Node.js安装后 npm -v报错
前端·npm·node.js·人机交互
zzZ··*2 天前
CodeBuddy 用量看板:本地解析 Token 与积分消耗,不联网不上传
python·vue·ai编程
EatFan2 天前
Go语言全栈实战:基于 Gin + Vue + JWT + RBAC 从零搭建前后端分离权限管理系统
vue.js·golang·go·vue·gin·jwt·rbac
liangshanbo12152 天前
面试题:如何优化 Webpack 的打包速度?
前端·webpack·node.js