Создание Zip-файлов в качестве буферов в Node.js с использованием JSZip: подробное руководство

В этом руководстве мы рассмотрим различные методы создания zip-файлов в качестве буферов в Node.js с использованием популярной библиотеки JSZip. Мы предоставим примеры кода для каждого метода, чтобы вы могли понять и реализовать их в своих проектах. Давайте погрузимся!

Метод 1: создание ZIP-файла с несколькими файлами

const JSZip = require('jszip');
const fs = require('fs');
const createZipBuffer = async (filePaths) => {
  const zip = new JSZip();

  for (const filePath of filePaths) {
    const fileData = await fs.promises.readFile(filePath);
    zip.file(filePath, fileData);
  }

  return await zip.generateAsync({ type: 'nodebuffer' });
};
// Usage
const filePaths = ['file1.txt', 'file2.png', 'file3.pdf'];
createZipBuffer(filePaths)
  .then(zipBuffer => {
    // Use the zipBuffer as desired
    fs.writeFileSync('archive.zip', zipBuffer);
  })
  .catch(error => {
    console.error(error);
  });

Метод 2: создание ZIP-файла из одного файла

const JSZip = require('jszip');
const createSingleFileZipBuffer = async (fileName, fileContent) => {
  const zip = new JSZip();
  zip.file(fileName, fileContent);

  return await zip.generateAsync({ type: 'nodebuffer' });
};
// Usage
const fileName = 'file.txt';
const fileContent = 'This is a test file.';
createSingleFileZipBuffer(fileName, fileContent)
  .then(zipBuffer => {
    // Use the zipBuffer as desired
    fs.writeFileSync('archive.zip', zipBuffer);
  })
  .catch(error => {
    console.error(error);
  });

Метод 3: добавление каталогов в ZIP-файл

const JSZip = require('jszip');
const fs = require('fs');
const addDirectoriesToZipBuffer = async (directoryPaths) => {
  const zip = new JSZip();

  for (const directoryPath of directoryPaths) {
    const files = await fs.promises.readdir(directoryPath);

    for (const file of files) {
      const filePath = `${directoryPath}/${file}`;
      const fileData = await fs.promises.readFile(filePath);

      // Use relative path for zip file structure
      const relativePath = filePath.replace(directoryPath, '');
      zip.file(relativePath, fileData);
    }
  }

  return await zip.generateAsync({ type: 'nodebuffer' });
};
// Usage
const directoryPaths = ['dir1', 'dir2'];
addDirectoriesToZipBuffer(directoryPaths)
  .then(zipBuffer => {
    // Use the zipBuffer as desired
    fs.writeFileSync('archive.zip', zipBuffer);
  })
  .catch(error => {
    console.error(error);
  });

В этом руководстве мы рассмотрели различные методы создания zip-файлов в качестве буферов в Node.js с использованием JSZip. Мы рассмотрели создание zip-файлов из нескольких файлов, создание zip-файлов из одного файла и добавление каталогов в zip-файл. Вы можете выбрать метод, соответствующий вашим требованиям, и легко реализовать его в своих проектах Node.js. Приятного кодирования!