在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();
        }
     }
  }  
}

  存在问题:解压出来的文件名如果含有中文,则是乱码,需要额外处理。

posted @ 2020-09-30 15:35  lsboom  阅读(2270)  评论(0编辑  收藏  举报