上代碼吧~
import JSZip from 'jszip'; export default { methods: { async validZip(file, needFile) { // file為文件對象,needFile為必需的文件名數組 var result, needFile, flag = true; var isLimit = file.size / 1024 / 1024 < 30; // 離線包大小大於30M if (!isLimit) { this.$message.error('離線包大小不能超過30M!'); return Promise.reject(); } // 讀取文件為異步操作 result = await new Promise((resolve) => { JSZip.loadAsync(file).then(function (zip) { var nameArr = [];// zip.files為解壓出來的文件 Object.keys(zip.files).forEach((fname) => { nameArr.push(fname); }); // 返回解壓后的文件相對路徑 return nameArr; }).then(function (results) { resolve(results); }); }); // 判斷是否包含文件 needFile.forEach((file) => { if (result.indexOf(file) === -1) { flag = false; } }); if (!flag) { this.$message.error('離線包目錄結構不正確!'); return Promise.reject(); } } } }
存在問題:解壓出來的文件名如果含有中文,則是亂碼,需要額外處理。