在Node.js中使用ZIP/压缩包:Adm-Zip库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

用于在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),但对于基本保护来说已经足够。



<

推荐