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都能提供穩定可靠的性能表現。通過合理的配置和使用,開發者可以輕松構建出高效的文件處理應用。