Vue 3 實現后端 Excel 文件流導出功能(Blob 下載詳解)

💡 本文以告警信息導出為例,介紹 Vue 3 中如何通過 Axios 調用后端接口并處理文件流,實現 Excel 自動下載功能。


📑 目錄

  • 一、前言

  • 二、后端接口說明

  • 三、前端實現思路

  • 四、導出功能完整代碼

  • 五、常見問題處理

  • 六、效果展示

  • 七、總結


一、前言

在數據后臺管理系統中,Excel 導出功能是一個非常常見的需求。本文將介紹如何在 Vue 3 項目中,通過后端返回的 文件流(Blob) 實現 Excel 自動下載功能,解決文件類型識別、命名、Blob 轉換等常見問題。


二、后端接口說明

  • 請求地址/operation/alarm/dealExport

  • 請求方式:GET

  • 請求參數:支持條件篩選(如告警 ID、時間等)

  • 響應格式Content-Type: application/vnd.ms-excel

  • 返回內容.xlsx 文件二進制流(Blob)


三、前端實現思路

  1. 請求接口時通過 responseType: 'blob' 獲取流數據。

  2. 接收到的 Blob 數據創建 URL 鏈接。

  3. 使用 <a> 標簽觸發下載,設置 download 為導出文件名。

  4. 下載完成后銷毀鏈接釋放資源。


四、導出功能完整代碼

1?? 接口封裝(api/alarm.js

// 告警信息導出接口
export const alarmExport = (params) => {return request({url: '/operation/alarm/dealExport',method: 'get',params,responseType: 'blob', // 關鍵點!});
};

2?? Vue 組件中的導出方法(使用 Composition API)

import { ref } from 'vue';
import { ElMessage } from 'element-plus';
import { alarmExport } from '@/api/alarm';const selectedList = ref([]); // 已選擇的數據項
const queryParamsAlarm = ref({// 示例參數,可根據實際業務填寫alarmType: '',startTime: '',endTime: '',pageNum: 1,pageSize: 10,
});/** 導出 */
const handleExport = async () => {const params = { alarmIds: '', ...queryParamsAlarm.value };delete params.pageNum;delete params.pageSize;// 提取選擇項的 alarmId 列表if (selectedList.value.length > 0) {const ids = selectedList.value.map((item) => item.alarmId);params.alarmIds = ids.join(',');}try {const res = await alarmExport(params);// 構造 Blob 下載const blob = new Blob([res], { type: 'application/vnd.ms-excel' });const url = window.URL.createObjectURL(blob);const link = document.createElement('a');link.href = url;link.download = `告警導出_${new Date().toLocaleDateString()}.xlsx`;document.body.appendChild(link);link.click();document.body.removeChild(link);window.URL.revokeObjectURL(url); // 釋放內存ElMessage.success('導出成功');} catch (error) {console.error('導出失敗', error);ElMessage.error('導出失敗,請重試');}
};


五、常見問題處理

問題解決方案
導出的文件是亂碼檢查 Blob 類型是否為 application/vnd.ms-excel
下載沒反應確保使用了 responseType: 'blob'a.download 設置了文件名
文件擴展名錯誤link.download = xxx.xlsx 明確設置擴展名
無法創建鏈接檢查是否正確調用 URL.createObjectURL(blob)


六、效果展示

  • ? 可篩選導出

  • ? 可選擇部分導出

  • ? 支持文件命名

  • ? 下載完成即銷毀資源


七、總結

本文通過 Vue 3 + Axios + Element Plus 實現了一個實用的 Excel 導出功能,核心關鍵點包括:

  • 使用 responseType: 'blob' 正確獲取文件流

  • Blob + URL + a 標簽實現下載

  • 設置 Content-Typedownload 屬性確保兼容性

希望本文能幫你快速實現導出功能,如有疑問歡迎評論交流!


📌 收藏 + 點贊 + 關注,持續更新更多前端實戰技巧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83690.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS AVPlayer 音頻播放器

鴻蒙文檔中心&#xff1a;使用AVPlayer播放視頻(ArkTS)文檔中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback 這張圖描述的是 HarmonyOS AVPlayer 音頻播放器的狀態流轉過程&#xff0c;展示了 AVPlayer 在不同狀態之間的切換條件和關鍵操作…

Java面試場景:從音視頻到AI應用的技術探討

面試場景&#xff1a;音視頻與AI應用技術的碰撞 在某互聯網大廠的面試中&#xff0c;面試官王先生與求職者明哥展開了一場關于音視頻技術與AI應用的對話。 第一輪提問&#xff1a;音視頻場景 面試官&#xff1a;明哥&#xff0c;你能談談在音視頻場景中&#xff0c;Spring B…

【深度學習】殘差網絡(ResNet)

如果按照李沐老師書上來&#xff0c;學完 VGG 后還有 NiN 和 GoogLeNet 要學&#xff0c;但是這兩個我之前聽都沒聽過&#xff0c;而且我看到我導師有發過 ResNet 相關的論文&#xff0c;就想跳過它們直接看后面的內容。 現在看來這不算是不踏實&#xff0c;因為李沐老師說如果…

Vue3學習(組合式API——父、子組件間通信詳解)

目錄 一、組合式API下的父組件傳子組件。(自定義屬性) &#xff08;1&#xff09;基本思想。 &#xff08;2&#xff09;核心注意點。(defineProps) &#xff08;3&#xff09;傳遞簡單類型數據。 &#xff08;4&#xff09;傳遞對象類型數據。(v-bind"對象類型數據"…

W5500使用ioLibrary庫創建TCP客戶端

1、WIZnet全硬件TCP/IP協議棧 WIZnet全硬件TCP/IP協議棧,支持TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE協議。 以太網&#xff1a;支持BSD和WIZCHIP&#xff08;W5500/W5300/W5200/W5100/W5100S&#xff09;的SOCKET APIs驅動程序。 互聯網&#xff1a; DHCP客戶端 DNS客戶端 FTP客…

管理Oracle Data Guard的最佳實踐

Oracle Data Guard的中文名字叫數據衛士&#xff0c;顧名思義&#xff0c;它是生產庫的一道保障。所以管理Data Guard是DBA的一項重要工作之一&#xff0c;管理Data Guard時主要有以下幾個注意點需要引起重視。 備份庫的歸檔日志積壓 一般情況下&#xff0c;生產庫的歸檔日志是…

BootCDN介紹(Bootstrap主導的前端開源項目免費CDN加速服務)

文章目錄 BootCDN前端開源項目CDN加速服務全解析什么是BootCDN技術原理與架構CDN技術基礎BootCDN架構特點1. 全球分布式節點網絡2. 智能DNS解析系統3. 高效緩存管理機制4. 自動同步更新機制5. HTTPS和HTTP/2協議支持 BootCDN的核心優勢速度與穩定性開源免費資源豐富度技術規范遵…

2025 Java 微信小程序根據code獲取openid,二次code獲取手機號【工具類】拿來就用

一、controller調用 /*** 登錄** author jiaketao* since 2024-04-10*/ RestController RequestMapping("/login") public class LoginController {/*** 【小程序】登錄獲取session_key和openid** param code 前端傳code* return*/GetMapping("/getWXSessionKe…

軟件架構風格系列(3):管道 - 過濾器架構

文章目錄 前言一、從生活場景到架構原理&#xff0c;看懂管道 - 過濾器的核心邏輯&#xff08;一&#xff09;什么是管道 - 過濾器架構&#xff1f;&#xff08;二&#xff09;核心組件拆解 二、架構設計圖&#xff1a;一圖看懂管道 - 過濾器架構全貌三、Java 示例代碼&#xf…

【VIM】vim 常用命令

文章目錄 插入模式光標移動拷貝/粘貼/刪除/撤銷塊操作分屏代碼縮進命令組合使用其他PowerVim 前言&#xff1a;本文內容大部分摘抄自酷殼和博客園 ? – ? CoolShell – 陳皓 ? 博客園 – 易先訊 插入模式 a → 在光標后插入o → 在當前行后插入一個新行O → 在當前行前插…

polarctf-web-[簡單rce]

考點&#xff1a; (1)RCE(eval函數) (2)執行函數(passthru函數) (3)/頂級(根)目錄查看 (4)sort排序查看函數 題目來源&#xff1a;Polarctf-web-[簡單rce] 解題&#xff1a; 代碼審計 <?php/*?PolarD&N CTF?*/highlight_file(__FILE__);function no($txt){ # …

HarmonyOs開發之———使用HTTP訪問網絡資源

謝謝關注&#xff01;&#xff01; 前言&#xff1a;上一篇文章主要介紹HarmonyOs開發之———Video組件的使用:HarmonyOs開發之———Video組件的使用_華為 video標簽查看-CSDN博客 HarmonyOS 網絡開發入門&#xff1a;使用 HTTP 訪問網絡資源 HarmonyOS 作為新一代智能終端…

Vue 圖片預覽功能(含縮略圖)

眾所周知&#xff0c;常見的組件庫如Element、Ant Design&#xff0c;自帶的圖片預覽功能都沒有縮略圖&#xff0c;所以 需要單獨封裝一個圖片預覽的服務。 第三方庫&#xff1a;v-viewer 安裝&#xff1a; npm install v-viewer viewerjs 若使用報錯&#xff0c;可安裝指定…

手寫tomcat:基本功能實現(4)

邏輯架構 HTTP 請求與 Socket&#xff1a; 左側的 “HTTP 請求” 箭頭指向 “socket”&#xff0c;表示客戶端發送的 HTTP 請求通過 socket 傳輸到服務器。Socket 負責接收請求&#xff0c;并提取出其中的 請求路徑&#xff08;如 /first&#xff09;和 請求方法&#xff08;如…

jvm安全點(一)openjdk17 c++源碼垃圾回收安全點信號函數處理線程阻塞

1. 信號處理入口?? ??JVM_HANDLE_XXX_SIGNAL?? 是 JVM 處理信號的統一入口&#xff0c;負責處理 SIGSEGV、SIGBUS 等信號。??javaSignalHandler?? 是實際注冊到操作系統的信號處理函數&#xff0c;直接調用 JVM_HANDLE_XXX_SIGNAL。 ??2. 安全點輪詢頁的識別?? …

微信小程序:封裝表格組件并引用

一、效果 封裝表格組件,在父頁面中展示表格組件并顯示數據 二、表格組件 1、創建頁面 創建一個components文件夾,專門用于存儲組件的文件夾 創建Table表格組件 2、視圖層 (1)表頭數據 這里會從父組件中傳遞表頭數據,這里為columns,后續會講解數據由來 循環表頭數組,…

【FMC216】基于 VITA57.1 的 2 路 TLK2711 發送、2 路 TLK2711 接收 FMC 子卡模塊

產品概述 FMC216 是一款基于 VITA57.1 標準規范的 2 路 TLK2711 接收、2 路 TLK2711 發送 FMC 子卡模塊。該板卡支持 2 路 TLK2711 數據的收發&#xff0c;支持線速率 1.6Gbps&#xff0c;經過 TLK2711 高速串行收發器&#xff0c;可以將 1.6Gbps 的高速串行數據解串為 16 位并…

K8S Gateway API 快速開始、胎教級教程

假設有如下三個節點的 K8S 集群&#xff1a; ?? k8s31master 是控制節點 k8s31node1、k8s31node2 是工作節點 容器運行時是 containerd 一、Gateway 是什么 背景和目的 入口&#xff08;Ingress&#xff09;目前已停止更新。新的功能正在集成至網關 API 中。在 Kubernetes …

時序數據庫IoTDB分布式架構解析與運維指南

一、IoTDB分布式架構概述 分布式系統由一組獨立的計算機組成&#xff0c;通過網絡通信&#xff0c;對外表現為一個統一的整體。IoTDB的原生分布式架構將服務分為兩個核心部分&#xff1a; ?ConfigNode&#xff08;CN&#xff09;?&#xff1a;管理節點&#xff0c;負責管理…

Ubuntu 20.04 LTS 中部署 網頁 + Node.js 應用 + Nginx 跨域配置 的詳細步驟

Ubuntu 20.04 LTS 中部署 網頁 Node.js 應用 Nginx 跨域配置 的詳細步驟 一、準備工作1、連接服務器2、更新系統 二、安裝 Node.js 環境1、安裝 Node.js 官方 PPA&#xff08;用于獲取最新穩定版&#xff09;&#xff1a;2、安裝 Node.js 和 npm&#xff08;LTS 長期支持版本…