在js中进行zip包解压并校验内容
上代码吧~
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(); } } } }
存在问题:解压出来的文件名如果含有中文,则是乱码,需要额外处理。