在做一些後台的報表數據時,可能會遇到,點擊【下載】按鈕後,直接實現下載 Excel 文件功能。
前端需要解析後端返回的二進制流文件,返回新建立的 Blob 物件,再創建 a 標籤,利用 a 標籤的 href 屬性,載入數據流,同時還可以自定義文件名稱。
API 設定 responseType
Axios api
在 API 的地方加上 responseType: 'blob'
1 | export function exportExcel() { |
建立 Blob
var aBlob = new Blob( array, options );
array 可以是一個由 ArrayBuffer、ArrayBufferView、Blob 組成的 Array 物件,或是上述多種型別物件的混合陣列。這個陣列將會被放進新建立的
Blob
物件當中。DOMStrings 的編碼為 UTF-8。options 是選擇性的 BlobPropertyBag 字典物件,有以下兩個指定的屬性:
type
屬性,預設值為空字串""
,表示將被放進Blob
物件的陣列內容之 MIME 類型。endings
屬性,表示包含\n
換行字元的字串要如何輸出,預設值為字串"transparent"
。此屬性值可為:"native"
,代表換行字元會被轉為目前作業系統的換行字元編碼。也可以是"transparent"
,代表保留Blob
物件中資料的換行字元。
自訂檔名
可以利用 download 屬性來自定義下載檔案名稱
1 | async downloadExcel() { |
抓 content-disposition 取得檔名
抓取 header 的 content-disposition 填入檔案名稱
如瀏覽器支援 filename*=UTF-8
則顯示此檔名
如不支援則顯示 filename=
的檔名
1 | async downloadExcel() { |
REFERENCE
Hey!想學習更多前端知識嗎?
最近 Lala 開了前端課程 👉【實地掌握RWD - 12小時新手實戰班】👈無論您是 0 基礎新手,又或是想學 RWD 的初學者,
我們將帶你從零開始,深入了解並掌握 RWD 響應式網頁設計的核心技術,快來一起看看吧 😊