1. 使用Node.js内置的zlib模块来压缩文件夹。示例代码:
const fs = require('fs');
const zlib = require('zlib');

const inputFolder = './input';
const outputFile = './output/compressed.zip';

const zipStream = zlib.createGzip();
const outputStream = fs.createWriteStream(outputFile);

fs.readdir(inputFolder, (err, files) => {
  if (err) throw err;

  files.forEach((file) => {
    const inputPath = `${inputFolder}/${file}`;
    const readStream = fs.createReadStream(inputPath);
    readStream.pipe(zipStream, { end: false });
  });

  zipStream.on('end', () => {
    console.log(`Finished compressing ${inputFolder} to ${outputFile}`);
  });

  zipStream.pipe(outputStream);
});
  1. 使用npm包node-zip来压缩文件夹。示例代码:
const fs = require('fs');
const Zip = require('node-zip');

const inputFolder = './input';
const outputFile = './output/compressed.zip';

const zip = new Zip();

fs.readdir(inputFolder, (err, files) => {
  if (err) throw err;

  files.forEach((file) => {
    const inputPath = `${inputFolder}/${file}`;
    const fileContent = fs.readFileSync(inputPath);
    zip.file(file, fileContent);
  });

  const data = zip.generate({ base64: false, compression: 'DEFLATE' });
  fs.writeFileSync(outputFile, data, 'binary');
  console.log(`Finished compressing ${inputFolder} to ${outputFile}`);
});
  1. 使用npm包archiver来压缩文件夹。示例代码:
const fs = require('fs');
const archiver = require('archiver');

const inputFolder = './input';
const outputFile = './output/compressed.zip';

const output = fs.createWriteStream(outputFile);
const archive = archiver('zip', { zlib: { level: 9 } });

output.on('close', () => {
  console.log(`Finished compressing ${inputFolder} to ${outputFile}`);
});

archive.on('error', (err) => {
  throw err;
});

archive.pipe(output);

fs.readdir(inputFolder, (err, files) => {
  if (err) throw err;

  files.forEach((file) => {
    const inputPath = `${inputFolder}/${file}`;
    archive.file(inputPath, { name: file });
  });

  archive.finalize();
});

推荐使用archiver库来压缩文件夹,它提供了更多的选项和更好的性能

nodejs 压缩文件夹到指定位置的多种方式和推荐库dome

原文地址: http://www.cveoy.top/t/topic/fmlS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录