jszip递归压缩文件夹的文件,读取文件流

本文展示了如何在Node.js环境中使用fs模块读取文件和文件夹,结合path模块处理路径,以及JSZip库来压缩文件和目录。通过排除特定文件或文件夹(如.git和node_modules),递归读取并压缩目标文件夹,最后将生成的ZIP内容写入指定的输出文件。

1、导入fs模块

const fs = require('fs');
const path = require('path')
let JSZip = require("jszip");
// let saveAs = require("jszip/vendor/FileSaver.js");
const version = require('./package.json');

2、排除部分文件或文件夹

const exclude = name => !['.git', 'node_modules'].includes(name)

3、zip 递归读取文件夹下的文件流

function readDir(zip, nowPath) {
    // 读取目录中的所有文件及文件夹(同步操作)
    let files = fs.readdirSync(nowPath)

    //遍历检测目录中的文件
    files.filter(exclude).forEach((fileName, index) => {
        // 打印当前读取的文件名
        console.log(fileName, index)

        // 当前文件的全路径
        let fillPath = path.join(nowPath, fileName)

        // 获取一个文件的属性
        let file = fs.statSync(fillPath)

        // 如果是目录的话,继续查询
        if (file.isDirectory()) {
            // 压缩对象中生成该目录
            let dirlist = zip.folder(fileName)
            // (递归)重新检索目录文件
            readDir(dirlist, fillPath)
        } else {
            // 压缩目录添加文件
            zip.file(fileName, fs.readFileSync(fillPath))
        }
    })
}

4、开始压缩文件

// 开始压缩文件
function zipFolder({ target = __dirname, output = __dirname }) {
    // 创建 zip 实例
    const zip = new JSZip()

    // zip 递归读取文件夹下的文件流
    readDir(zip, target)

    // 设置压缩格式,开始打包
    zip.generateAsync({
        // nodejs 专用
        type: 'nodebuffer',
        // 压缩算法
        compression: 'DEFLATE',
        // 压缩级别
        compressionOptions: { level: 9, },
    }).then(content => {
        // 将打包的内容写入 当前目录下的 result.zip中
        fs.writeFileSync(output, content, 'utf-8')
    })
}

5、压缩输出的文件夹名称


zipFolder({
    // 目标文件夹
    target: path.join(__dirname, version.version),
    // 输出 zip 
    output: __dirname + `/${version.version}.zip`
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值