ZipUtils.js 1.64 KB
import fs from "fs-extra";
import archiver from "archiver";
import unzip from "unzip-stream";

class ZipUtils {



    /**
     * @description ZipUtils.zip('/xx/floder',floder,'/output/','myzip.zip')
     * @param {String} sourcePath 
     * @param {String} fromFloderName
     * @param {String} destinationFolder 
     * @param {String} zipFileName 
     * @returns {String}
     */
    static async zip(sourcePath,fromFloderName, destinationFolder, zipFileName) {
        let zipFilePath = destinationFolder + zipFileName;

        fs.ensureDirSync(destinationFolder);
        const archive = archiver("zip");
        const outputSteam = fs.createWriteStream(zipFilePath);
        await archive.pipe(outputSteam);
        await archive.directory(sourcePath,fromFloderName );
        await archive.finalize();

        return zipFilePath;
    }

    /**
     * @description ZipUtils.unzip("/tmp/myzip.zip",/tmp/output)
     * @param {String} zipFilePath 
     * @param {String} extractToPath 
     */
    static async unzip(zipFilePath,extractToPath){   
        //fs.ensureFileSync(extractToPath);
        await new Promise((subResolve, subReject) => {
            fs.createReadStream(zipFilePath)
            .pipe(unzip.Extract({
                path: extractToPath
            }))
            .on("close", async function (entry) {
                console.log('extract file successfully');
                subResolve(entry);
            })
            .on("error", async function (error) {
                console.log('extract file failed');
                subReject(error);
            });
        });

        return extractToPath;
       
    }
}

export default ZipUtils;