VUE+jszip如何實(shí)現(xiàn)下載多個(gè)文件導(dǎo)出為一個(gè)zip格式
VUE+jszip下載多個(gè)文件導(dǎo)出為一個(gè)zip格式
項(xiàng)目需求:
將多個(gè)文件/圖片導(dǎo)出為一個(gè)zip格式壓縮包,點(diǎn)擊<下載全部附件>按鈕下載上面三個(gè)文件
1、安裝jszip和file-saver插件
npm install jszip npm install file-saver
2、在所需頁(yè)面引入
import JSZip from "jszip"; import FileSaver from "file-saver";
3、模擬fileList數(shù)組
//fileList模擬文件數(shù)組 export default { name: "notice-list", data() { return { fileList: [ { fileName: '3.jpg', feilePath: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg' }, { fileName: '5.jpg', feilePath: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg' }, { fileName: '測(cè)試2.doc', feilePath: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg' } ], } } }
4、在methods中定義方法
// 下載全部附件 downloadBtn<下載全部附件>按鈕綁定事件 downloadBtn() { var blogTitle = `全部附件`; // 下載后壓縮包的名稱 var zip = new JSZip(); var promises = []; let cache = {}; for (let item of this.fileList) { // item.feilePath為文件鏈接地址 // item.fileName為文件名稱 if(item.feilePath) { const promise = this.getImgArrayBuffer(item.feilePath).then((data) => { // 下載文件, 并存成ArrayBuffer對(duì)象(blob) zip.file(item.fileName, data, { binary: true }); // 逐個(gè)添加文件 cache[item.fileName] = data; }); promises.push(promise); } else { // feilePath地址不存在時(shí)提示 alert(`附件${item.fileName}地址錯(cuò)誤,下載失敗`); } } Promise.all(promises).then(() => { zip.generateAsync({ type: "blob" }).then((content) => { // 生成二進(jìn)制流 FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件 blogTitle:自定義文件名 }); }).catch((res) => { alert("文件壓縮失敗"); }); }, //文件以流的形式獲?。▍?shù)url為文件鏈接地址) getImgArrayBuffer(url) { return new Promise((resolve, reject) => { //通過(guò)請(qǐng)求獲取文件blob格式 let xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", url, true); xmlhttp.responseType = "blob"; xmlhttp.onload = function () { if (xmlhttp.status == 200) { resolve(xmlhttp.response); } else { reject(xmlhttp.response); } }; xmlhttp.send(); }); },
5、復(fù)制粘貼可用
看過(guò)其它教程有一部分版本都是存在錯(cuò)誤的,所以修改了一部分
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js組件tree實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形菜單
這篇文章主要為大家詳細(xì)介紹了Vue.js組件tree實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形菜單代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12vue中keep-alive多級(jí)路由緩存問(wèn)題
本文主要介紹了vue中keep-alive多級(jí)路由緩存問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12vue3自定義確認(rèn)密碼匹配驗(yàn)證規(guī)則的操作代碼
這篇文章主要介紹了vue3自定義確認(rèn)密碼匹配驗(yàn)證規(guī)則的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Vue-cli3.X使用px2 rem遇到的問(wèn)題及解決方法
這篇文章主要介紹了Vue-cli3.X使用px2rem遇到的問(wèn)題及解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Vant Uploader實(shí)現(xiàn)上傳一張或多張圖片組件
這篇文章主要為大家詳細(xì)介紹了Vant Uploader實(shí)現(xiàn)上傳一張或多張圖片組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09vue3配置代理實(shí)現(xiàn)axios請(qǐng)求本地接口返回PG庫(kù)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了vue3配置代理實(shí)現(xiàn)axios請(qǐng)求本地接口返回PG庫(kù)數(shù)據(jù)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-03-03Vue實(shí)現(xiàn)戶籍管理系統(tǒng)戶籍信息的添加與刪除方式
這篇文章主要介紹了Vue實(shí)現(xiàn)戶籍管理系統(tǒng)戶籍信息的添加與刪除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09el-tab設(shè)置默認(rèn)激活的標(biāo)簽頁(yè)實(shí)現(xiàn)步驟
這篇文章主要給大家介紹了關(guān)于el-tab設(shè)置默認(rèn)激活的標(biāo)簽頁(yè)實(shí)現(xiàn)步驟,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09