GitHub上一些实用的JavaScript的文件压缩解压缩库推荐

作者:代码拾荒时间:2026-10-29 23:15:21浏览:182

本文对比了JavaScript中常用的文件压缩与解压缩库,包括adm-zip、JSZip以及archiver与unzip组合。分析了各库在处理现有文件夹时的优缺点,如adm-zip操作简便但存在bug,JSZip适合动态数据但处理现有文件夹繁琐,archiver组合稳定且易用。

JavaScript文件压缩库概述

在项目中需要归档和解归档整个已存在的文件夹时,我尝试了几种当前较为流行的JavaScript库,主要包括adm-zip、JSZip和archiver等。

adm-zip库的使用与优缺点

一、使用adm-zip adm-zzip支持对一个或多个文件或整个文件夹进行归档和解归档操作,其使用过程简单且便捷。


  var adm_zip = require('adm-zip');

  //creating archives
  var zip = new adm_zip(); 
  zip.addLocalFolder('archiver'); 
  zip.writeZip('adm/adm-archive.zip'); 

  //extracting archives 
  var unzip = new adm_zip('adm/adm-archive.zip'); 
  unzip.extractAllTo("adm/adm-unarchive/", /*overwrite*/true);

优缺点分析: 1. 该库同时实现了压缩和解压功能,只需提供路径即可对已存在的文件或文件夹进行操作,接口丰富且使用简单。 2. 该库本身存在bug,有时解压后的文件无法完全还原。希望未来这些bug能得到修复。

JSZip库的使用与优缺点

二、使用JSZip 使用JSZip时,需要逐个将文件添加到zip对象中,并手动添加文件内容,最后通过写文件操作将内存中的zip对象转换为物理存储。因此,对于整个文件夹的操作较为繁琐,需要遍历文件夹。


var JSZip = require("jszip");
var fs = require("fs");

var zip = new JSZip();

var file_content = fs.readFileSync('archive/a.txt');


zip.file("a.txt",file_content);

var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, {base64: true});

var zipfolder = zip.generate({type:"nodebuffer"});

fs.writeFile("jszip.zip", zipfolder, function(err) {
  if (err) throw err;
});

JSZip中的folder方法仅用于切换zip对象内部的虚拟路径,例如zip.folder("img").file('a.txt')即在zip中添加一个img子目录,并在其下创建a.txt,效果等同于zip.file("img/a.txt")。需要注意的是,文件内容需手动添加,若仅执行zip.file("a.txt");则仅在zip对象中创建了一个内容为空的txt文件,且该文件仅存在于内存中,需执行写文件操作后才会真正存储到磁盘。

优缺点分析: 1. 适用于将实时接收的数据转换为zip格式。 2. 对于已存在的文件夹操作不便,需逐个将内容添加到zip对象,再转换为文件。 3. 需注意多种编码问题。 4. 仅具备压缩功能。

archiver与unzip组合的使用与优缺点

三、使用archiver和unzip 这是最终选择的方案,较为可靠且使用简单。其中archiver功能强大,支持zip和tar格式,只需提供路径即可压缩已存在的文件夹。压缩代码示例如下:


var fs = require('fs');
var archiver = require('archiver');

var output = fs.createWriteStream('archiver-unzip.zip');
var archive = archiver('zip');

archive.on('error', function(err){
  throw err;
});

archive.pipe(output);
archive.bulk([
  { src: ['archiver/**']}
]);
archive.finalize();

解压代码示例如下:


var fs = require("fs");
var unzip = require("unzip");

fs.createReadStream('archiver-unzip.zip').pipe(unzip.Extract({ path: 'unarchive' }));

优缺点分析: 1. 经过长期测试,bug较少。 2. 使用便捷,无需遍历文件夹。 3. 各库仅提供压缩或解压功能,未同时实现两者。(因此adm-zzip其实很好用,但bug是硬伤...)

以上是我昨天找到的一些库,欢迎推荐其他库。

作者最新文章