【前言】
用nodejs怎么压缩文件为zip,或者解压缩zip文件,有两个比较成熟的npm库:
https://www.npmjs.com/package/adm-zip
https://www.npmjs.com/package/archiver
但是两者都有一些问题,下面试简介:
admin-zip:https://blog.csdn.net/uikoo9/article/details/116381396
archiver:https://blog.csdn.net/uikoo9/article/details/116381493
【qiao.plugin.zip】
综上,封装了一个npm包:qiao.plugin.zip,https://www.npmjs.com/package/qiao.plugin.zip
具备以下功能:
1.支持压缩,支持解压缩
2.支持操作文件,支持操作文件夹
3.若目标地址不存在会自动创建
4.不存在中文乱码问题
5.多层压缩解压缩正常
【unzip】
var qiaoPluginZip = require('qiao.plugin.zip');
var test = function(){
var zipFile = 'd:/test1.zip';
var destFolder = 'd:/test2/';
qiaoPluginZip.unzip(zipFile, destFolder);
};
test();
【zipFileSync】
var qiaoPluginZip = require('qiao.plugin.zip');
var test = async function(){
var sourceFile = 'd:/test.js';
var destZip = 'd:/test22.zip';
try{
var msg = await qiaoPluginZip.zipFileSync(sourceFile, destZip);
console.log(msg);
}catch(e){
console.log(e);
}
};
test();
【zipFolderSync】
var qiaoPluginZip = require('qiao.plugin.zip');
var test = async function(){
var sourceFolder = 'd:/test/';
var destZip = 'd:/test24.zip';
try{
var msg = await qiaoPluginZip.zipFolderSync(sourceFolder, destZip);
console.log(msg);
}catch(e){
console.log(e);
}
};
test();
【zipFile】
var qiaoPluginZip = require('qiao.plugin.zip');
var test = function(){
var sourceFile = 'd:/test.js';
var destZip = 'd:/test22.zip';
qiaoPluginZip.zipFile(sourceFile, destZip, function(err, msg){
if(err) throw err;
console.log(msg);
});
};
test();
【zipFolder】
var qiaoPluginZip = require('qiao.plugin.zip');
var test = function(){
var sourceFolder = 'd:/test/';
var destZip = 'd:/test23.zip';
qiaoPluginZip.zipFolder(sourceFolder, destZip, function(err, msg){
if(err) throw err;
console.log(msg);
});
};
test();
【test-01】
测试:解压缩,zip文件路径多层级
期望:zip文件路径的多层级不影响解压缩
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = function(){
var zipFile = 'd:/qiao.plugin.zip/demo01/test.zip';
var destFolder = 'd:/';
qiaoPluginZip.unzip(zipFile, destFolder);
};
test();
【test-02】
测试:解压缩,目标文件路径多层级
期望:目标文件路径的多层级不影响解压缩
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = function(){
var zipFile = 'd:/qiao.plugin.zip/demo02/test.zip';
var destFolder = 'd:/qiao.plugin.zip/demo02';
qiaoPluginZip.unzip(zipFile, destFolder);
};
test();
【test-03】
测试:解压缩,目标文件路径多层级,且不存在
期望:目标文件路径多层级且不存在不影响解压缩
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = function(){
var zipFile = 'd:/qiao.plugin.zip/demo03/test.zip';
var destFolder = 'd:/qiao.plugin.zip/demo99';//这个path不存在
qiaoPluginZip.unzip(zipFile, destFolder);
};
test();
【test-04】
测试:解压缩,zip中文件带有中文名
期望:解压缩后中文文件名不乱码
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = function(){
var zipFile = 'd:/qiao.plugin.zip/demo04/test.zip';// 这个zip中的文件为test-你好.js
var destFolder = 'd:/qiao.plugin.zip/demo04';
qiaoPluginZip.unzip(zipFile, destFolder);
};
test();
【test-05】
测试:解压缩,zip中文件夹嵌套
期望:zip中多文件夹嵌套,多文件可以正常解压缩
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = function(){
var zipFile = 'd:/qiao.plugin.zip/demo05/test.zip';// 这个zip中多文件夹嵌套,多文件,中文名文件
var destFolder = 'd:/qiao.plugin.zip/demo05';
qiaoPluginZip.unzip(zipFile, destFolder);
};
test();
【test-06】
测试:压缩文件,待压缩文件路径多层级
期望:待压缩文件路径多层级,压缩后不引入
结论:通过
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = async function(){
try{
var sourceFile = 'd:/qiao.plugin.zip/demo06/test.js';
var destZip = 'd:/qiao.plugin.zip/demo06/test.zip';
await qiaoPluginZip.zipFileSync(sourceFile, destZip);
}catch(e){
console.log(e);
}
};
test();
【test-07】
测试:压缩文件,待压缩文件包含中文
期望:压缩后文件中文无乱码
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = async function(){
try{
var sourceFile = 'd:/qiao.plugin.zip/demo07/test-你好.js';
var destZip = 'd:/qiao.plugin.zip/demo07/test.zip';
await qiaoPluginZip.zipFileSync(sourceFile, destZip);
}catch(e){
console.log(e);
}
};
test();
【test-08】
测试:压缩文件,目标zip路径不存在
期望:可以自动创建
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = async function(){
try{
var sourceFile = 'd:/qiao.plugin.zip/demo07/test-你好.js';
var destZip = 'd:/qiao.plugin.zip/demo98/test.zip';// demo98这个路径不存在
await qiaoPluginZip.zipFileSync(sourceFile, destZip);
}catch(e){
console.log(e);
}
};
test();
【test-09】
测试:压缩文件夹,目标文件夹多层级
期望:可将该文件夹下的所有文件文件夹正确压缩
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = async function(){
try{
var sourceFolder = 'd:/test';// 该路径下多文件夹,多文件等
var destZip = 'd:/qiao.plugin.zip/demo08/test.zip';
await qiaoPluginZip.zipFolderSync(sourceFolder, destZip);
}catch(e){
console.log(e);
}
};
test();
【test-10】
测试:压缩文件夹,目标文件夹压缩后包一层
期望:压缩文件夹并设置subdir属性生效
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = async function(){
try{
var sourceFolder = 'd:/test';// 该路径下多文件夹,多文件等
var destZip = 'd:/qiao.plugin.zip/demo09/test.zip';
await qiaoPluginZip.zipFolderSync(sourceFolder, destZip, 'test');
}catch(e){
console.log(e);
}
};
test();
【test-11】
测试:压缩文件夹,目标zip路径不存在
期望:可以自动创建
结论:通过
'use strict';
var qiaoPluginZip = require('../../lib/qiao.plugin.zip.js');
var test = async function(){
try{
var sourceFolder = 'd:/test';// 该路径下多文件夹,多文件等
var destZip = 'd:/qiao.plugin.zip/demo97/test.zip';// demo97不存在
await qiaoPluginZip.zipFolderSync(sourceFolder, destZip, 'test');
}catch(e){
console.log(e);
}
};
test();