前端導出文件
-
前端很常見的導出需求 導出world xlsx 甚至是zip
-
在我這個項目中是導出圖片,圖片量還是蠻大的,直接干崩潰了
-
我們這里是后端同學直接返回的是文件流
-
通過調用接口拿到文件流后直接調用下面的方法
export function exportZip(res, name) {const blob = new Blob([res.data], {type: 'application/zip'})const reader = new FileReader()reader.readAsDataURL(blob)reader.onload = function (e) {const a = document.createElement('a')a.download = `${name}.zip`a.href = e.target.result// 兼容觸發clickconst evt = document.createEvent('MouseEvents')evt.initEvent('click', true, true)a.dispatchEvent(evt)} }
然后就出現上面的崩潰,分析后是因為文件流太大導致的,解決辦法如下:
-
直接讓后端同學將zip準備好,調用接口返回的是一個地址 我們通過訪問地址來下載zip
<a @click="downFile()">{{文件名稱}}</a>//下載方法downZip () {let a = document.createElement('a')a.href = '這里是后端同學返回的地址'a.click()}```
-
我們可以接收較大的文檔流—在 github 上面找到了大神寫的一個庫
-
首先安裝(基于Vue,也可以去訪問gitHub上下載:https://github.com/eligrey/FileSaver.js)
npm install file-saver --save
-
引入方法
import { saveAs } from ‘file-saver’;
-
通過調用上面引入的方法來接收很大的文件流 (修改我們上面的exportZip方法如下)
export function exportZip(res, name) {const blob = new Blob([res.data], {type: 'application/zip'})saveAs(blob, name) }
-
再試試就搞定了