在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();
}
}
}
}
存在问题:解压出来的文件名如果含有中文,则是乱码,需要额外处理。

浙公网安备 33010602011771号