上代碼吧~
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();
}
}
}
}
存在問題:解壓出來的文件名如果含有中文,則是亂碼,需要額外處理。
