nodejs解壓zip/rar檔案到本地,並獲取到解壓進度

herry菌發表於2024-06-27

方案:解壓到本地的大小 / zip檔案總大小(解壓後的) ,得出解壓進度

先得出解壓後的檔案大小,然後解壓到本地

const AdmZip = require("adm-zip");
const JSZip = require('jszip');

// 指定ZIP檔案的路徑
const admZip = new AdmZip("D:\\Users\\whr4220\\Downloads\\test (3).rar");
const zip = new JSZip();
// 解壓目標目錄
const extractPath = './downloads'

// 獲取ZIP檔案中所有檔案的列表
const entries = admZip.getEntries();
// console.log(admZip, entries)


// 初始化已解壓檔案的總大小
let totalSize = 0;

// 遍歷所有檔案,計算總大小
entries.forEach(entry => {
  totalSize += entry.header.size;
});
console.log('解壓後的大小', totalSize)

// 解壓檔案到指定目錄
admZip.extractAllTo(extractPath, true);

console.log('解壓完成');
獲取指定目錄的大小,得出當前解壓了多少
const fs = require('fs');
const path = require('path');

//獲取指定目錄的大小
function getFolderSize(folderPath) {
  let totalSize = 0;

  fs.readdirSync(folderPath).forEach(file => {
    const filePath = path.join(folderPath, file);
    const stats = fs.statSync(filePath);

    if (stats.isFile()) {
      totalSize += stats.size;
    } else if (stats.isDirectory()) {
      totalSize += getFolderSize(filePath); // 遞迴呼叫
    }
  });

  return totalSize;
}

// 使用函式
const size = getFolderSize('./downloads');
console.log('大小', size);

相關文章