Trabalhando com arquivos ZIP em Node.js: bibliotecas archiver e adm-zip

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com arquivos ZIP em Node.js: bibliotecas archiver e adm-zip



No desenvolvimento web moderno com Node.js, surge frequentemente a necessidade de compactar arquivos em arquivos ou extrair dados deles. Seja para backup, download de vários arquivos em um único arquivo ou processamento de dados do usuário — o trabalho com o formato ZIP continua sendo muito requisitado. Para Node.js, existem várias bibliotecas populares, e neste artigo vamos abordar duas das mais poderosas e convenientes: archiver (para criar arquivos) e adm-zip (para ler e manipular arquivos).



Por que bibliotecas para trabalhar com ZIP são necessárias?

O Node.js não fornece, por padrão, ferramentas integradas para trabalhar com arquivos. Embora exista o módulo zlib para compressão de fluxos individuais, para criar arquivos ZIP completos com vários arquivos e pastas, são necessárias soluções especializadas. As bibliotecas archiver e adm-zip resolvem essas tarefas, oferecendo uma API simples e alto desempenho.



Instalação das bibliotecas

Ambas as bibliotecas são instaladas via npm. Execute no terminal:

npm install archiver adm-zip


Biblioteca archiver: criação de arquivos ZIP

archiver é uma biblioteca para criar arquivos de vários formatos (ZIP, TAR, GZIP). Ela trabalha com streams, o que permite processar eficientemente grandes volumes de dados sem carregar o arquivo inteiro na memória.



Principais recursos do archiver:

  • Criação de arquivos ZIP com nível de compressão configurável
  • Adição de arquivos e diretórios inteiros
  • Trabalho com streams para economia de memória
  • Suporte a comentários e metadados


Exemplo: criando um arquivo ZIP simples

const fs = require('fs');const archiver = require('archiver');

// Cria um stream de escrita para o arquivoconst output = fs.createWriteStream('example.zip');const archive = archiver('zip', { zlib: { level: 9 } }); // compressão máxima

// Tratamento de eventosoutput.on('close', () => { console.log(`Arquivo criado: ${archive.pointer()} bytes`);});

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

// Adiciona arquivosarchive.append('Conteúdo do arquivo 1', { name: 'file1.txt' });archive.file('/path/to/existing/file.txt', { name: 'renamed-file.txt' });archive.directory('my_folder/', 'new_folder_name');

// Finaliza a compactaçãoarchive.pipe(output);archive.finalize();


Exemplo: compactação com transmissão por stream

const http = require('http');const archiver = require('archiver');

http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'application/zip', 'Content-disposition': 'attachment; filename=download.zip' });

const archive = archiver('zip', { zlib: { level: 5 } }); archive.pipe(res);

archive.append('Arquivo de texto', { name: 'text.txt' }); archive.append(Buffer.from([0x00, 0x01, 0x02]), { name: 'binary.bin' }); archive.finalize();}).listen(3000);


Biblioteca adm-zip: leitura e extração de arquivos

adm-zip é uma biblioteca versátil para trabalhar com arquivos ZIP: leitura, escrita, atualização e extração. Ao contrário do archiver, ela trabalha não apenas com streams, mas também com buffers, o que é conveniente para arquivos pequenos.



Principais recursos do adm-zip:

  • Leitura de arquivos ZIP existentes
  • Extração de todos ou de arquivos individuais
  • Escrita de novos arquivos (alternativa ao archiver)
  • Trabalho com buffers e strings


Exemplo: extraindo arquivos de um arquivo

const AdmZip = require('adm-zip');

// Carrega um arquivo existenteconst zip = new AdmZip('./example.zip');

// Obtém a lista de arquivosconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`Arquivo

Recommendations