vue項(xiàng)目使用jszip和file-saver批量打包壓縮圖片或附件方式
使用jszip和file-saver批量打包壓縮圖片或附件
背景:
圖片上傳功能用戶會(huì)批量上傳好多個(gè),并且圖片可能還會(huì)很大,于是就采用了前端先壓縮,然后將壓縮包直接傳給后端。
1、安裝插件:
npm install jszip npm install file-saver
2、在頁(yè)面中引入插件:
import JSZip from 'jszip'; import FileSaver from 'file-saver'; // 定義全局的 zip const zip = new JSZip();
注釋:在引入組件的位置定義一個(gè)全局的 zip 用于文件的壓縮
3、element UI 上傳組件:
<el-upload
class="upload-demo"
accept=".jpg,.JPG,.png,.PNG"
action="#"
:multiple="true"
:auto-upload="false"
:on-change="handleChange1"
:show-file-list="false"
:file-list="fileList1">
<el-button size="small" type="primary">選擇文件</el-button>
</el-upload>
<el-button class="handle-upload" size="small" type="primary" @click="uploadData()" :loading="loadingFile1">開始上傳</el-button>4、初始化 data 數(shù)據(jù):
export default {
data() {
return {
fileList1: [], // 待上傳圖片數(shù)據(jù)
}
}
}5、添加圖片選擇的 onchange 方法:
export default {
methods: {
// 上傳圖片
handleChange1(file, fileList) {
const that = this;
const _file = file.raw;
let blob = new Blob([_file], { type: _file.type});
zip.file(_file.name, blob);
this.fileList1 = fileList;
},
// 開始上傳
uploadData(){
// 生成 ZIP 文件
zip.generateAsync({ type: 'blob' })
.then(function (zipBlob) {
// 在這里可以進(jìn)行上傳操作,將 zipBlob 發(fā)送到服務(wù)器
// 也可以通過 FileSaver.js 將 ZIP 文件保存到本地
FileSaver.saveAs(zipBlob, '壓縮包名稱.zip');
})
.catch(function (error) {
console.error('壓縮視頻失敗:', error);
});
}
}
}注釋:zip. 屬性是在第二步中進(jìn)行定義的,具體請(qǐng)參考第二步
至此前端附件壓縮完成!??!
附加:從服務(wù)器獲取附件,進(jìn)行壓縮下載
1、安裝插件:
npm install jszip
2、在頁(yè)面中引入插件:
import JSZip from 'jszip';
3、第3 、4步同上
5、添加圖片選擇的 onchange 方法:
export default {
methods: {
// 圖片壓縮前轉(zhuǎn)換
imgToBuffer(url) {
return new Promise((resolve, reject) => {
const xml = new XMLHttpRequest();
xml.open('GET', url, true);
xml.responseType = 'blob';
xml.onload = function ({ currentTarget }) { //從事件對(duì)象結(jié)構(gòu)出currentTarget
const { status, response } = currentTarget;
status === 200 ? resolve(response) : reject(status); // response就是轉(zhuǎn)化后的
};
xml.send();
});
},
// 開始?jí)嚎s
uploadData(){
const zip = new JSZip();
const imgCache = {};
const imgArr = [];
let list = [
{name: '測(cè)試圖片1', url: 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF'},
{name: '測(cè)試圖片2', url: 'https://t7.baidu.com/it/u=727460147,2222092211&fm=193&f=GIF'},
{name: '測(cè)試圖片3', url: 'https://t7.baidu.com/it/u=3911840071,2534614245&fm=193&f=GIF'},
{name: '測(cè)試圖片4', url: 'https://t7.baidu.com/it/u=938052523,709452322&fm=193&f=GIF'},
];
list.forEach((item) => { // urlList格式:[{url:圖片鏈接,name:圖片名稱}...]
// 逐個(gè)添加文件
const promise = this.imgToBuffer(item.url).then((res) => {
zip.file(`${item.name}.${res.type.split('/').pop()}`, res, { binary: true });
imgCache[item.name] = res; // 下載文件, 并存成ArrayBuffer對(duì)象(blob)
});
imgArr.push(promise);
});
Promise.all(imgArr).then(() => {
zip.generateAsync({ type: 'blob' }).then((content) => {
saveAs(content, '壓縮包名稱'); // 打包壓縮
this.$message.success('壓縮完成');
}).catch((err) => {
this.$message.error(err.message);
});
});
}
}
}至此完成壓縮下載?。?!
總結(jié)
以上測(cè)試有效,感謝支持?。?!
這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目proxyTable配置小結(jié)
本文主要介紹了vue項(xiàng)目proxyTable配置小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Vue--Router動(dòng)態(tài)路由的用法示例詳解
這篇文章主要介紹了Vue--Router動(dòng)態(tài)路由的用法,很多時(shí)候,我們需要將給定匹配模式的路由映射到同一個(gè)組件,在?Vue?Router?中,我們可以在路徑中使用一個(gè)動(dòng)態(tài)字段來實(shí)現(xiàn),我們稱之為路徑參數(shù),本文對(duì)Vue?Router動(dòng)態(tài)路由相關(guān)知識(shí)給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-08-08
基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖效果
這篇文章主要介紹了基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
element ui表格實(shí)現(xiàn)下拉篩選功能
這篇文章主要為大家詳細(xì)介紹了element ui表格實(shí)現(xiàn)下拉篩選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
mini-vue渲染的簡(jiǎn)易實(shí)現(xiàn)
本文主要介紹了mini-vue渲染的簡(jiǎn)易實(shí)現(xiàn),主要簡(jiǎn)單來實(shí)現(xiàn)一個(gè)虛擬dom渲染真實(shí)dom,以及更新的方法。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
vue本地打開build后生成的dist文件夾index.html問題
這篇文章主要介紹了vue本地打開build后生成的dist文件夾index.html問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-09-09

