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

项目里要用到archive和unarchive整个已存在的folder,在找解决方案的时候尝试了一些当前比较流行的library,主要有adm-zip,JSZip,archiver等。

一.Use

adm-zip支持archive和unarchive一个或多个文件或者整个文件夹的功能,使用非常的简单方便。

//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);

Pros and cons: 1. 同时实现了压缩和解压,而且只要提供路径就可以对已存在的文件或文件夹进行操作,实现了很多接口,使用方便简单。 2. 本身存在,有的时候解压文件没法还原到本来的文件。Hope慢慢这些bug会fix好。

二. Use

这个库在使用的时候需要把文件一个个增加到zip对象中,而且需要把内容也手动添加,再使用写文件操作把内存中的zip对象转成物理存储。所以如果是对于一整个文件夹来说,就很麻烦,需要遍历文件夹。

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文件,而且它只是存在于内存中,需要写文件操作后才会真正存到磁盘。

Pros and cons: 1.对于一些实时接受到的数据转成zip的比较适用。 2.对于已存在的文件夹操作不便,需要一个个把内容添加到zip对象,再转成文件。 3.很多编码需要注意。 4.只有压缩功能。

三. Use and

这个组合是最后我使用的,比较靠谱,使用也比较简单,其中archiver很强大,支持zip格式tar格式,只需要提供路径就可以压缩已存在的文件夹。 压缩:

rush:js;"> 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();

解压:

rush:js;"> var fs = require("fs"); var unzip = require("unzip");

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

Pros and cons: 1. 久经试用,bug较少。 2.使用方便,不需要遍历文件夹。 3. 均只提供压缩或者解压,没有两个功能都实现的。(所以adm-zip其实很好用,但bug是硬伤啊...)

这些只是我昨天找的一些库,欢迎推荐其他库么么哒

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...