Vue實現(xiàn)文件批量打包壓縮下載
上次做了一個選擇多個數(shù)據(jù)生成多個二維碼并下載,當(dāng)時項目催的緊,就簡單寫了個循環(huán)生成二維碼下載,一次性會下載很多文件,特別難整理;
剛好這次項目又遇到類似這種功能,需要一次性批量下載多個文件,那么就安排下打包下載吧!
需要用到的是file-saver、jszip兩個插件
首先,我們安裝這兩個插件,在控制臺中依次輸入下方命令執(zhí)行
npm install file-saver npm install jszip
上方依賴安裝完成,我們在需要實現(xiàn)打包下載的頁面中引入這兩個插件
import JSZip from "jszip"; import FileSaver from "file-saver";
在data中,我就簡單定義一個數(shù)組 fileList ,用來存放要下載的文件鏈接
data() { return { fileList: [ { name: 'logo1', url: 'https://duanqinghua.com/logo.png' }, { name: 'logo2', url: 'http://sharedbk.com/logo.png' } ] } }
接著就是在 methods 中寫下載事件了
// 點擊下載 download() { var blogTitle = `下載文件名字`; // 下載后壓縮包的命名 var zip = new JSZip(); var promises = []; let cache = {}; let arrImg = []; for (let i = 0; i < this.appData.resources.length; i++) { arrImg.push({ path: this.appData.resources[i].url, // 文件鏈接 name: this.appData.resources[i].name // 文件名稱 }); } for (let item of arrImg) { // item.path為文件鏈接地址 const promise = this.getImgArrayBuffer(item.path).then((data) => { // 下載文件, 并存成ArrayBuffer對象(blob) zip.file(item.name, data, { binary: true }); // 逐個添加文件 cache[item.name] = data; }); promises.push(promise); } Promise.all(promises).then(() => { zip.generateAsync({ type: "blob" }).then((content) => { // 生成二進制流 FileSaver.saveAs(content, blogTitle); // 利用file-saver保存文件 自定義文件名 }); }).catch((res) => { alert("文件壓縮失敗"); }); }, //文件以流的形式獲?。▍?shù)url為文件鏈接地址) getImgArrayBuffer(url) { return new Promise((resolve, reject) => { //通過請求獲取文件blob格式 let xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", url, true); xmlhttp.responseType = "blob"; xmlhttp.onload = function () { if (this.status == 200) { resolve(this.response); } else { reject(this.status); } }; xmlhttp.send(); }); }
很多小伙伴復(fù)制完代碼使用,點擊下載后瀏覽器會報跨域問題,這個問題并非前端問題,需要后端在存儲文件的服務(wù)器中設(shè)置允許跨域,添加 Access-Control-Allow-Origin 即可!
到此這篇關(guān)于Vue實現(xiàn)文件批量打包壓縮下載的文章就介紹到這了,更多相關(guān)Vue文件打包壓縮下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于vue-cli vue-router搭建底部導(dǎo)航欄移動前端項目
這篇文章主要介紹了基于vue-cli vue-router搭建底部導(dǎo)航欄移動前端項目,項目中主要用了Flex布局,以及viewport相關(guān)知識,已達(dá)到適應(yīng)各終端屏幕的目的。需要的朋友可以參考下2018-02-02在vue項目中 實現(xiàn)定義全局變量 全局函數(shù)操作
這篇文章主要介紹了在vue項目中 實現(xiàn)定義全局變量 全局函數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10通過GASP讓vue實現(xiàn)動態(tài)效果實例代碼詳解
GASP是一個JavaScript動畫庫,它支持快速開發(fā)高性能的 Web 動畫。GASP 使我們能夠輕松輕松快速的將動畫串在一起,來創(chuàng)造一個高內(nèi)聚的流暢動畫序列。這篇文章主要介紹了通過GASP讓vue實現(xiàn)動態(tài)效果,需要的朋友可以參考下2019-11-11Vue通過阿里云oss的url連接直接下載文件并修改文件名的方法
這篇文章主要介紹了Vue通過阿里云oss的url連接直接下載文件并修改文件名的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12