Javascript

nodejs jszip 压缩文件夹 过滤文件 递归文件夹 读取文件流

本文主要是介绍nodejs jszip 压缩文件夹 过滤文件 递归文件夹 读取文件流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原文地址:https://www.cnblogs.com/PigpigRun/p/10420074.html

 

// 原文地址:https://www.cnblogs.com/PigpigRun/p/10420074.html
// $ npm i jszip -S
const fs = require('fs')
const path = require('path')
const JSZIP = require('jszip')

// 排除部分文件或文件夹
const exclude = name => !['.git', 'node_modules'].includes(name)

// 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)) 
        }
    })
}

// 开始压缩文件
function zipFolder({ target = __dirname, output = __dirname + '/result.zip' }) {
    // 创建 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') 
    })
}

zipFolder({ 
    // 目标文件夹
    target: path.join(__dirname, 'test'), 
    // 输出 zip 
    output: __dirname + '/result.zip' 
})

 

这篇关于nodejs jszip 压缩文件夹 过滤文件 递归文件夹 读取文件流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!