用于在Node.js中处理ZIP压缩包的Adm-Zip库
在开发基于Node.js的Web应用程序、服务器工具或数据处理工具时,经常需要处理ZIP压缩包:在发送给用户之前打包文件、解压收到的压缩包,或者在不完全解压的情况下操作内容。在JavaScript生态系统中,有多个库可用于这些任务,其中最简单、最流行的库之一是Adm-Zip。
什么是Adm-Zip?
Adm-Zip是一个纯JavaScript库,用于Node.js,它允许创建、读取和修改ZIP压缩包,无需外部依赖(例如,无需在系统中安装zip或unzip工具)。它既可以处理磁盘上的文件,也可以处理内存中的缓冲区,使其成为Web服务器和云函数的理想选择。
该库的主要功能:
- 从文件、文件夹或字符串数据创建新的ZIP压缩包。
- 解压压缩包,提取到指定目录或缓冲区。
- 在不完全解压的情况下读取压缩包内容(查看文件列表、读取单个条目)。
- 在现有压缩包内添加、删除和更新文件。
- 处理压缩包和单个文件的注释。
- 支持密码(ZipCrypto加密)。
- 支持流(Stream)处理大数据。
安装
该库的安装与npm包的标准安装方式相同:
npm install adm-zip安装后,您可以在项目中引入它:
const AdmZip = require('adm-zip');创建ZIP压缩包
创建新压缩包非常简单。您可以添加单个文件,也可以添加整个文件夹。
const AdmZip = require('adm-zip');
// 创建新的压缩包实例const zip = new AdmZip();
// 从字符串添加文件zip.addFile('hello.txt', Buffer.from('Hello, World!', 'utf8'));
// 从磁盘添加文件zip.addLocalFile('/path/to/image.jpg');
// 添加本地文件夹的内容zip.addLocalFolder('/path/to/documents', 'backup/docs');
// 将压缩包写入磁盘zip.writeZip('myarchive.zip');
console.log('压缩包已创建:myarchive.zip');您也可以将压缩包作为缓冲区获取,以便通过HTTP响应发送:
const zipBuffer = zip.toBuffer();// 现在可以将zipBuffer作为二进制文件发送给用户解压ZIP压缩包
解压只需几行代码。该库支持提取所有文件以及读取单个条目。
const AdmZip = require('adm-zip');
try { // 打开现有压缩包 const zip = new AdmZip('myarchive.zip');
// 将所有文件提取到指定文件夹 zip.extractAllTo('extracted/', true); // true — 覆盖现有文件
console.log('压缩包已解压到extracted/文件夹');} catch (err) { console.error('解压时出错:', err.message);}如果您需要在不解压的情况下读取压缩包内容:
const zip = new AdmZip('myarchive.zip');
// 获取条目数组(文件和文件夹)const zipEntries = zip.getEntries();
zipEntries.forEach(entry => { if (!entry.isDirectory) { console.log(`文件:${entry.entryName},大小:${entry.header.size} 字节`); // 将文件内容作为字符串读取 const content = entry.getData().toString('utf8'); console.log('内容:', content.substring(0, 100)); }});使用密码(加密)
Adm-Zip支持ZipCrypto加密。请注意:这不是最现代的方法(不支持AES),但对于基本保护来说已经足够。
<