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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM