遇到前端導出 Excel 文件出現亂碼或文件損壞的問題

1. 檢查后端返回的數據格式

  • 確認接口響應:確保后端返回的是二進制流(如?ArrayBuffer)或?Base64 編碼的 Excel 文件,而非 JSON 字符串。

    • 用瀏覽器開發者工具(Network 標簽)檢查接口響應類型:

      • 正確的?Content-Type?應為?application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(xlsx)或?application/vnd.ms-excel(xls)。

      • 響應體應為二進制(非可讀文本)。

2. 前端正確處理二進制數據

方案 1:直接下載(推薦)

如果后端返回的是文件流,前端無需手動生成文件,直接觸發下載:

// 假設使用 axios
axios.get('/api/export', {responseType: 'blob', // 關鍵:指定響應類型為 Blob
}).then(response => {const url = window.URL.createObjectURL(new Blob([response.data]));const link = document.createElement('a');link.href = url;link.setAttribute('download', 'data.xlsx');document.body.appendChild(link);link.click();document.body.removeChild(link);
});
方案 2:手動構造 Blob

如果后端返回的是 Base64 編碼:

const base64Data = '后端返回的Base64字符串';
const byteCharacters = atob(base64Data);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });// 觸發下載(同方案1)

3. 編碼問題處理

亂碼的可能原因
  • 響應頭缺失:后端未設置?Content-Disposition?或?Content-Type

  • 前端未正確解碼:如 Base64 解碼錯誤或字符集不匹配。

解決方案
  • 強制設置編碼(適用于亂碼):

    const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' });

    檢查文件名編碼:如果文件名亂碼,后端需在?Content-Disposition?中編碼文件名:

    Content-Disposition: attachment; filename*=UTF-8''%E6%95%B0%E6%8D%AE.xlsx

    4. 常見錯誤排查

    問題現象可能原因解決方案
    文件損壞,無法打開Blob 類型錯誤或數據截斷檢查?responseType: 'blob'?和響應數據完整性
    文件名亂碼響應頭未編碼文件名后端設置?filename*=UTF-8''xxx
    瀏覽器直接顯示亂碼文本未正確識別為二進制流確保?Content-Type?和?responseType?匹配
    文件內容為 JSON 文本后端實際返回了 JSON 數據檢查接口邏輯,確保返回文件流

    5. 測試工具驗證

  • 使用 Postman 或 Curl 直接請求接口
    確認下載的文件是否正常。如果后端返回的文件本身有問題,需優先修復后端。

  • 對比前后端文件
    用二進制工具(如 Hex Editor)比較前后端生成的文件,確認是否一致。

6. 終極備用方案

如果以上方法無效,嘗試純前端生成 Excel(適用于數據量小的場景)

import * as XLSX from 'xlsx'; // 使用 sheetjs 庫const data = [[“姓名”, “年齡”], [“張三”, 25]];
const ws = XLSX.utils.aoa_to_sheet(data);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
XLSX.writeFile(wb, "export.xlsx");

總結步驟

  1. 確認后端返回的是二進制流(非 JSON)。

  2. 前端指定?responseType: 'blob'

  3. 正確構造 Blob 并設置 MIME 類型

  4. 檢查響應頭編碼和文件名

  5. 如仍失敗,換用純前端庫生成 Excel 或聯調后端修復數據源。

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

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

相關文章

2025年Cloudflare WAF防護機制深度剖析:5秒盾繞過完全指南

2025年Cloudflare WAF防護機制深度剖析&#xff1a;5秒盾繞過完全指南 技術概述 Cloudflare作為全球領先的CDN和網絡安全服務提供商&#xff0c;其WAF&#xff08;Web Application Firewall&#xff09;防護系統已經成為現代Web安全的標桿。特別是其標志性的"5秒盾"…

【Android調用相冊、拍照、錄像】等功能的封裝

關于調用Android項目 關于Android中調用相機拍照、錄像&#xff0c;調用相冊選圖等是比較繁瑣的&#xff0c;為了減少代碼冗余&#xff0c;肯定需要封裝成工具類&#xff0c;最終使用大概如下&#xff0c;大部分代碼使用Java編寫&#xff0c;因為需要照顧到不適用kotlin的伸手…

Git 分支管理:從新開發分支遷移為主分支的完整指南

問題背景 我在使用 Git 進行開發時&#xff0c;由于原有的主分支遭到了污染&#xff0c;不得已在多方嘗試之后&#xff0c;決定替換原有的主分支。創建一個新分支并完成了重要修改&#xff1a; 基于提交 0fcb6df0f5e8caa3d853bb1f43f23cfe6d269b18 創建了 new-development 分支…

nginx常見問題(四):端口無權限

當 Nginx 日志報錯 bind() to 80 failed (13: Permission denied) 時&#xff0c;這通常是由于權限不足導致 Nginx 無法綁定到 80 端口&#xff08;該端口為系統特權端口&#xff09;。以下是詳細的問題分析與解決方案&#xff1a;一、問題原因分析80 端口屬于 系統特權端口&am…

【線性代數】線性方程組與矩陣——(3)線性方程組解的結構

上一節&#xff1a;【線性代數】線性方程組與矩陣——&#xff08;2&#xff09;矩陣與線性方程組的解 總目錄&#xff1a;【線性代數】目錄 文章目錄9. 向量組的線性相關性與線性方程組解的結構9.1. 向量組及其線性組合9.2. 向量組的線性相關性9.3. 向量組的秩9.4. 線性方程組…

機器學習-----K-means算法介紹

一、為什么需要 K-Means&#xff1f;在監督學習中&#xff0c;我們總把數據寫成 (x, y)&#xff0c;讓模型學習 x → y 的映射。 但現實中很多數據根本沒有標簽 y&#xff0c;例如&#xff1a;啤酒&#xff1a;熱量、鈉含量、酒精度、價格用戶&#xff1a;訪問時長、點擊次數、…

Spring Security自動處理/login請求,后端控制層沒有 @PostMapping(“/login“) 這樣的 Controller 方法

一&#xff1a;前言 &#xff08;1&#xff09;Spring Security概念&#xff1a; Spring Security 是屬于 Spring 生態下一個功能強大且高度可定制的認證和授權框架&#xff0c;它不僅限于 Web 應用程序的安全性&#xff0c;也可以用于保護任何類型的應用程序。 &#xff08…

idea開發工具中git如何忽略編譯文件build、gradle的文件?

idea開發工具中&#xff1a; git顯示下面這個文件有變更&#xff1a; ~/Documents/wwwroot-dev/wlxl-backend/java/hyh-apis/hyh-apis-springboot/build/resources/main/mapping/AccountRealnameMapper.xml 我git的根路徑是&#xff1a; ~/Documents/wwwroot-dev/wlxl-backend/…

狀態機淺析

狀態機是處理狀態依賴型行為的高效工具&#xff0c;通過結構化建模狀態轉換&#xff0c;解決了傳統條件判斷的冗余和混亂問題。它在設備控制、流程管理、協議解析等場景中表現優異&#xff0c;核心優勢在于邏輯清晰、可擴展性強和易于調試。 一、介紹 1. 概念 狀態機&#x…

Windows 手動病毒排查指南:不依賴殺毒軟件的系統安全防護

Windows 手動病毒排查指南&#xff1a;不依賴殺毒軟件的系統安全防護 在數字時代&#xff0c;電腦病毒就像潛伏的"網絡幽靈"&#xff0c;從竊取隱私的木馬到消耗資源的蠕蟲&#xff0c;時刻威脅著系統安全。當殺毒軟件失效或遭遇新型威脅時&#xff0c;手動排查病毒便…

GPT-5 is here

GPT-5 is here https://openai.com/index/introducing-gpt-5/ — and it’s #1 across the board! #1 in Text, WebDev, and Vision Arena #1 in Hard Prompts, Coding, Math, Creativity, Long Queries, and more Tested under the codename “summit”, GPT-5 now holds the …

【華為機試】55. 跳躍游戲

文章目錄55. 跳躍游戲題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路一、問題本質與建模二、方法總覽與選擇三、貪心算法的正確性&#xff08;直觀解釋 循環不變式&#xff09;四、反向貪心&#xff1a;等價但有啟發的視角五、與動態規劃的對比與誤區…

RabbitMQ面試精講 Day 18:內存與磁盤優化配置

【RabbitMQ面試精講 Day 18】內存與磁盤優化配置 開篇&#xff1a;內存與磁盤優化的重要性 歡迎來到"RabbitMQ面試精講"系列的第18天&#xff01;今天我們將深入探討RabbitMQ的內存與磁盤優化配置&#xff0c;這是面試中經常被問及的高頻主題&#xff0c;也是生產環…

【C++】string 的特性和使用

Ciallo&#xff5e; (∠?ω< )⌒★ string&#xff08;1&#xff09;1. 構造函數1.1 string();1.2 string(const char* s);1.3 string(const string& str);1.4 string(size_t n, char c);1.5 string(const string& str, size_t pos, size_t len npos);1.6 string(…

創始人IP的精神修煉:于成長中積蓄力量

IP 經濟席卷之下&#xff0c;眾多企業家常被 “是否入局 IP”“能否做好 IP” 的焦慮裹挾。這種潛藏的精神內耗&#xff0c;對企業根基的侵蝕往往勝過業績的起伏。著名文化學者于丹在全球創始人 IP 領袖高峰論壇上的洞見&#xff0c;為創始人 IP 的精神成長照亮了前路&#xff…

gbase8s數據庫中對象元數據查詢

最近整理了gbase8s數據庫中常見的元數據的查詢&#xff0c;包括表、視圖、序列、包、類型、觸發器、plsql等等&#xff0c;僅供參考。set environment sqlmode oracle; drop package DBMS_METADATA; create or replace package DBMS_METADATA is function GET_DDL(objtype varc…

常用hook鉤子函數

爬蟲Hook技術常用字段和勾子函數 目錄 Hook技術概述網絡請求相關Hook瀏覽器環境HookJavaScript引擎Hook加密算法Hook反爬蟲檢測Hook實際應用示例Hook工具和框架 Hook技術概述 Hook&#xff08;鉤子&#xff09;技術是一種在程序運行時攔截和修改函數調用的技術。在爬蟲中&a…

【解決方法】華為電腦的亮度調節失靈

華為電腦的亮度調節失靈 參考文章&#xff1a; 華為電腦屏幕亮度怎么調不了&#xff1f;華為電腦調節亮度沒反應解決教程 親測&#xff0c;在控制面板中卸載HWOSD&#xff0c;再重裝有用。

【軟考中級網絡工程師】知識點之 DCC 深度剖析

目錄一、DCC 是什么1.1 定義闡述1.2 作用講解二、DCC 工作原理2.1 撥號觸發機制2.1.1 感興趣流量定義2.1.2 觸發撥號過程2.2 鏈路建立流程2.2.1 物理鏈路連接2.2.2 數據鏈路層協議協商三、DCC 配置要點3.1 基礎配置步驟3.1.1 接口配置3.1.2 撥號映射配置3.2 高級配置參數3.2.1 …

W5500之Socket寄存器區介紹

W5500之Socket寄存器區介紹1)、Socket n模式寄存器(Socket n Mode Register&#xff0c;簡寫Sn_MR)偏移地址為0x0000&#xff0c;可讀寫&#xff0c;復位值為0x00&#xff1b;Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0MULTI/MFENBCASTBND/MC/MMBUCASTB/MIP6BP3P2P1P0MULTI/MFEN占用“S…