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 对象以避免内存泄漏。

相关推荐
触底反弹3 小时前
🔥 前端也能玩转 AI 流式输出!从二进制流到打字机效果,一篇讲透
javascript·人工智能·node.js
海上彼尚4 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
Goodbye9 小时前
Node.js `path` 与 `fs` 模块详解——从路径操作到异步流程控制
node.js
Dreamboat-L13 小时前
NVM的安装与使用(保姆级教程)
npm·node.js
万亿少女的梦16815 小时前
基于Spring Boot、Vue与MySQL的高校实习信息管理系统设计与实现
spring boot·mysql·vue·权限管理·restful api
拾年27515 小时前
RAG 灵魂三问:你的文档是怎么"喂"给大模型的?
langchain·node.js·llm
南方程序猴17 小时前
Codex CLI + VS Code 组合教程:从 Node.js 安装到接入国内中转站
gpt·ai·chatgpt·node.js·ai编程
先吃饱再说18 小时前
后端也能用 jQuery 爬网页?Cheerio 了解一下
爬虫·node.js·jquery
qq_2128389718 小时前
后端Node.js + MySQL,前端Html+js,Nginx反向代理快速部署WEB项目
前端·mysql·node.js
徐小超18 小时前
从0到1落地AI知识问答系统(一):AI结对协作实战技巧
vue.js·node.js·全栈