UNPKG

qiao-zip

Version:
104 lines (87 loc) 2.13 kB
'use strict'; var admZip = require('adm-zip'); var iconv = require('iconv-lite'); var qiaoFile = require('qiao-file'); var archiver = require('archiver'); // adm /** * unzip * @param {*} zipFile * @param {*} destFolder */ const unzip = async (zipFile, destFolder) => { console.log(); console.log('qiao-zip / unzip'); console.log('qiao-zip / unzip / src', zipFile); console.log('qiao-zip / unzip / dest', destFolder); // check const zipFileExists = await qiaoFile.isExists(zipFile); if (!zipFileExists) { console.log('qiao-zip / unzip / error: zip file not exists'); return; } // zip const zip = new admZip(zipFile); // iconv const zipEntries = zip.getEntries(); for (let i = 0; i < zipEntries.length; i++) { const entry = zipEntries[i]; entry.entryName = iconv.decode(entry.rawEntryName, 'gbk'); } // e zip.extractAllTo(destFolder, true); // r console.log('qiao-zip / unzip / success'); console.log(); return true; }; // archiver /** * zip * @param {*} src * @param {*} dest * @param {*} subdir * @returns */ const zip = async (src, dest, subdir) => { // check ext const ext = qiaoFile.extname(dest); if (ext !== '.zip') { console.log('dest zip not end with .zip'); return; } try { await qiaoFile.mkdir(qiaoFile.path.dirname(dest)); const srcIsDir = await qiaoFile.isDir(src); return await zipPromise(src, dest, subdir, srcIsDir); } catch (error) { console.log(error); } }; // zip promise function zipPromise(src, dest, subdir, srcIsDir) { return new Promise((resolve, reject) => { // init const output = qiaoFile.fs.createWriteStream(dest); const archive = archiver('zip', { zlib: { level: 9 }, }); // on output.on('close', () => { resolve(true); }); archive.on('error', (err) => { reject(err); }); // zip archive.pipe(output); if (srcIsDir) { archive.directory(src, !!subdir); } else { archive.file(src, { name: qiaoFile.path.basename(src) }); } archive.finalize(); }); } exports.unzip = unzip; exports.zip = zip;