Trabalho com ZIP/arquivos em Node.js: biblioteca 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

Biblioteca Adm-Zip para trabalhar com arquivos ZIP em Node.js

No desenvolvimento de aplicações web, utilitários de servidor ou ferramentas de processamento de dados em Node.js, frequentemente surge a necessidade de trabalhar com arquivos ZIP: compactar arquivos antes de enviar ao usuário, extrair arquivos recebidos ou manipular o conteúdo sem extração completa. No ecossistema JavaScript, existem várias bibliotecas para essas tarefas, e uma das mais populares e fáceis de usar é a Adm-Zip.



O que é Adm-Zip?

Adm-Zip é uma biblioteca JavaScript pura para Node.js que permite criar, ler e modificar arquivos ZIP sem dependências externas (por exemplo, sem instalar o utilitário zip ou unzip no sistema). Ela funciona tanto com arquivos em disco quanto com buffers em memória, tornando-a ideal para servidores web e funções em nuvem.



Principais recursos da biblioteca:

  • Criação de novos arquivos ZIP a partir de arquivos, pastas ou dados de string.
  • Extração de arquivos com extração para um diretório especificado ou para um buffer.
  • Leitura do conteúdo do arquivo sem extração completa (visualização da lista de arquivos, leitura de entradas individuais).
  • Adição, remoção e atualização de arquivos dentro de um arquivo existente.
  • Trabalho com comentários no arquivo e em arquivos individuais.
  • Suporte a senhas (criptografia ZipCrypto).
  • Trabalho com streams para processamento de grandes volumes de dados.


Instalação

A instalação da biblioteca é padrão para pacotes npm:

npm install adm-zip


Após a instalação, você pode importá-la no seu projeto:

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


Criação de um arquivo ZIP

Criar um novo arquivo é muito simples. Você pode adicionar tanto arquivos individuais quanto pastas inteiras.



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

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

// Adicionamos um arquivo a partir de uma stringzip.addFile('hello.txt', Buffer.from('Olá, Mundo!', 'utf8'));

// Adicionamos um arquivo do discozip.addLocalFile('/caminho/para/imagem.jpg');

// Adicionamos o conteúdo de uma pasta localzip.addLocalFolder('/caminho/para/documentos', 'backup/docs');

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

console.log('Arquivo criado: meuarquivo.zip');


Você também pode obter o arquivo como um buffer para enviar via resposta HTTP:

const zipBuffer = zip.toBuffer();// Agora zipBuffer pode ser enviado ao usuário como um arquivo binário


Extração de um arquivo ZIP

A extração é feita em poucas linhas. A biblioteca suporta tanto a extração de todos os arquivos quanto a leitura de entradas individuais.



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

try { // Abrimos um arquivo existente const zip = new AdmZip('meuarquivo.zip');

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

console.log('Arquivo extraído para a pasta extraido/');} catch (err) { console.error('Erro ao extrair:', err.message);}


Se você precisar ler o conteúdo do arquivo sem extraí-lo:

const zip = new AdmZip('meuarquivo.zip');

// Obtemos um array de entradas (arquivos e pastas)const zipEntries = zip.getEntries();

zipEntries.forEach(entry => { if (!entry.isDirectory) { console.log(`Arquivo: ${entry.entryName}, tamanho: ${entry.header.size} bytes`); // Lemos o conteúdo do arquivo como string const content = entry.getData().toString('utf8'); console.log('Conteúdo:', content.substring(0, 100)); }});


Trabalho com senhas (criptografia)

Adm-Zip suporta criptografia ZipCrypto. Observe: este não é o método mais moderno (AES não é suportado), mas para proteção básica é adequado.



<

Recommendations