zip.js是一个开源的JavaScript库,专门用于在浏览器、Deno和Node.js环境中压缩和解压ZIP文件。该库设计用于处理大量数据,支持多核压缩、压缩流、Zip64格式(超过4GB的压缩包)、分卷压缩文件和数据加密等高级功能。
核心特性
高性能压缩
- 多核并行压缩,充分利用现代CPU性能
- 支持原生压缩流,提升处理效率
- Web Worker智能管理,避免阻塞主线程
安全加密
- 支持WinZIP AES加密(AES-128、AES-192、AES-256)
- 支持PKWare ZipCrypto加密
- 提供密码验证和数据保护机制
格式兼容
- 完整支持Zip64标准,突破4GB文件大小限制
- 兼容标准ZIP格式和分卷压缩文件
- 支持USDZ文件格式处理
快速开始
环境配置
通过npm安装最新版本:
npm install @zip.js/zip.js
或直接通过CDN引入:
<script src="https://unpkg.com/@zip.js/zip.js/index.js"></script>
基础使用示例
创建一个简单的ZIP文件:
import {
BlobReader,
BlobWriter,
TextReader,
TextWriter,
ZipReader,
ZipWriter,
} from "@zip.js/zip.js";
// 创建ZIP写入器
const zipFileWriter = new BlobWriter();
const helloWorldReader = new TextReader("Hello world!");
// 添加文件到压缩包
const zipWriter = new ZipWriter(zipFileWriter);
await zipWriter.add("hello.txt", helloWorldReader);
await zipWriter.close();
// 获取生成的ZIP文件
const zipFileBlob = await zipFileWriter.getData();
读取ZIP文件内容
// 创建ZIP读取器
const zipFileReader = new BlobReader(zipFileBlob);
const helloWorldWriter = new TextWriter();
// 读取第一个文件的内容
const zipReader = new ZipReader(zipFileReader);
const firstEntry = (await zipReader.getEntries()).shift();
const helloWorldText = await firstEntry.getData(helloWorldWriter);
await zipReader.close();
// 输出 "Hello world!"
console.log(helloWorldText);
高级功能
流式处理
使用TransformStream进行流式压缩和解压:
import { BlobReader, ZipReader, ZipWriter } from "@zip.js/zip.js";
// 创建流式压缩
const zipFileStream = new TransformStream();
const zipFileBlobPromise = new Response(zipFileStream.readable).blob();
const helloWorldReadable = new Blob(["Hello world!"]).stream();
const zipWriter = new ZipWriter(zipFileStream.writable);
await zipWriter.add("hello.txt", helloWorldReadable);
await zipWriter.close();
const zipFileBlob = await zipFileBlobPromise;
并发添加多个文件
import { BlobWriter, HttpReader, TextReader, ZipWriter } from "@zip.js/zip.js";
const README_URL = "https://unpkg.com/@zip.js/zip.js/README.md";
async function getZipFileBlob() {
const zipWriter = new ZipWriter(new BlobWriter("application/zip"));
await Promise.all([
zipWriter.add("hello.txt", new TextReader("Hello world!")),
zipWriter.add("README.md", new HttpReader(README_URL)),
]);
return zipWriter.close();
}
实际应用场景
企业文件下载服务 批量文件打包下载,减轻服务器压力,提升用户体验。通过客户端压缩多个文件,减少网络传输次数。
在线文档管理系统 直接在浏览器中预览和编辑压缩包内的文件,无需上传到服务器处理,保护用户隐私。
教育平台资源分发 课程资料一键打包下载,学生可以方便地获取完整的教学资源。
数据备份与迁移 在客户端完成数据压缩,便于存储和传输,支持大型数据文件处理。
性能优化技巧
内存管理
- 使用流式处理避免大文件内存溢出
- 合理配置缓冲区大小,平衡性能与内存使用
- 支持增量处理,降低内存峰值
并行处理
- 利用多核CPU进行并行压缩
- 智能任务分配,避免资源竞争
- 支持异步操作,提升响应速度
错误处理
zip.js提供了完善的错误处理机制,包含多种错误类型:
- ERR_BAD_FORMAT:文件格式错误
- ERR_ENCRYPTED:加密文件需要密码
- ERR_INVALID_PASSWORD:密码无效
- ERR_ZIP64_NOT_FOUND:Zip64格式错误
兼容性说明
浏览器支持
- Chrome 80+
- Firefox 78+
- Safari 14+
- Edge 80+
运行时环境
- Deno 1.0+
- Node.js 16.5+
- Bun 0.7+
总结
zip.js作为一款功能强大的JavaScript压缩库,为现代Web应用提供了完整的文件压缩解压解决方案。无论是简单的文本文件压缩,还是复杂的多文件并发处理,zip.js都能提供稳定可靠的性能表现。通过合理的配置和使用,开发者可以轻松构建出高效的文件处理应用。