Trabalhando com arquivos ZIP em Node.js: guia completo

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 adm-zip e archiver



No desenvolvimento web moderno com Node.js, surge frequentemente a necessidade de trabalhar com arquivos: compactar logs, transferir arquivos em grupos, extrair dados enviados pelo usuário. Neste material, abordaremos duas bibliotecas principais para trabalhar com o formato ZIP — adm-zip e archiver. Elas resolvem praticamente todas as tarefas relacionadas à compactação e são excelentes tanto para scripts simples quanto para aplicações em produção.



Biblioteca adm-zip: ferramenta universal para leitura e escrita de ZIP



adm-zip é uma implementação puramente em JavaScript para trabalhar com arquivos ZIP, sem dependências externas. Ela permite tanto criar novos arquivos quanto ler/modificar os existentes. A biblioteca é simples de usar e não requer a instalação de utilitários adicionais do sistema.



Instalação

npm install adm-zip


Criação de um arquivo ZIP

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

// Criamos uma nova instância do arquivoconst zip = new AdmZip();

// Adicionamos arquivos a partir de buffer ou stringzip.addFile('hello.txt', Buffer.from('Olá, Mundo!', 'utf8'));

// Adicionamos um arquivo localzip.addLocalFile('/caminho/para/imagem.png');

// Adicionamos uma pasta inteirazip.addLocalFolder('/caminho/para/documentos', 'docs');

// Gravamos o arquivo no discozip.writeZip('./saida/arquivo.zip');

console.log('Arquivo criado com sucesso!');


Leitura e extração de um arquivo existente

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

// Carregamos um arquivo existenteconst zip = new AdmZip('./entrada/arquivo.zip');

// Obtemos a lista de arquivosconst zipEntries = zip.getEntries();zipEntries.forEach((entry) => { console.log(`Arquivo: ${entry.entryName}, tamanho: ${entry.header.size} bytes`);});

// Extraímos todos os arquivos para uma pasta especificadazip.extractAllTo('./extraido', true); // true — sobrescrever arquivos existentes

// Ou obtemos o conteúdo de um arquivo específicoconst content = zip.readAsText('dados.json');console.log('Conteúdo de dados.json:', content);


Trabalhando com buffers (sem gravar no disco)

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

zip.addFile('relatorio.csv', 'id,nome,idade1,João,30');

// Obtemos o arquivo como Buffer para enviar via HTTPconst archiveBuffer = zip.toBuffer();

// Agora archiveBuffer pode ser enviado como resposta do servidor// ou passado para outra função


Biblioteca archiver: compactação avançada com fluxos



archiver é uma biblioteca mais poderosa, otimizada para trabalhar com grandes volumes de dados. Ela utiliza streams (fluxos) do Node.js, permitindo compactar arquivos "em tempo real" sem carregar todo o conteúdo na memória. Esta é a escolha ideal para aplicações de servidor com recursos limitados.



Instalação

npm install archiver


Criação de um arquivo com saída em fluxo

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

// Criamos um fluxo de gravaçãoconst output = fs.createWriteStream('./backup.zip');const archive = archiver('zip', { zlib: { level: 9 } // Nível máximo de compressão});

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

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

// Conectamos o fluxo do arquivo ao arquivo de saídaarchive.pipe(output);

// Adicionamos arquivosarchive.file('/var/log/app.log', { name: 'logs/app.log' });

// Adicionamos um diretório recursivamentearchive.directory('uploads/', 'arquivos_usuario');

// Adicionamos uma string como arquivoarchive.append('Este é o conteúdo do arquivo', { name: 'leia-me.txt' });

// Finalizamos a compactaçãoarchive.finalize();


Envio de arquivo via resposta HTTP

const express = require('ex                    

Recommendations