環境:nodejs v4.2.3
主要模組:node-zip、jszip
輔助模組:fs、path、async
var _zip = require('node-zip');
var fs = require("fs");
var path = require("path");
var async = require("async");
zip("monitor");
function zip(folder_path) {
var zip = new _zip();
append_cur_file(folder_path);
fs.writeFileSync(path.join(__dirname, folder_path + ".zip"), zip.generate({
base64: false,
compression: 'DEFLATE'
}), 'binary');
function append_cur_file(_path) {
var cur_path = path.join(_path);
var __list = fs.readdirSync(cur_path);
console.log(__list);
// add root folder
zip.folder(cur_path);
for (var i = 0; i < __list.length; i++) {
var __fs_stat = fs.statSync(path.join(cur_path, __list[i]));
if (__fs_stat.isDirectory() == true) {
append_cur_file(path.join(cur_path, __list[i]));
} else {
zip.file(path.join(cur_path, __list[i]), fs.readFileSync(path.join(cur_path, __list[i])));
}
};
}
}
upzip(__dirname + "/monitor.zip");
function unzip(zip_path) {
var zip = new _zip(fs.readFileSync(zip_path), {
base64: false,
checkCRC32: true
});
var __list = [];
for (var key in zip.files)
__list.push(key);
async.eachLimit(__list, 1,
function(file_name) {
if (zip.files[file_name].dir == true) {
var fobj = path.parse(file_name);
var _dir_list = fobj.dir.split(path.sep).filter(function(attr) {
return attr == undefined ? false : attr != "";
});
var cur_path = __dirname;
console.log("current file:" + file_name);
console.log("current obj:");
console.log(fobj);
for (var i = 0; i < _dir_list.length; i++) {
cur_path = path.join(cur_path, _dir_list[i]);
console.log("current path:" + cur_path);
if (fs.existsSync(cur_path) == false) {
console.log("create dir:" + cur_path);
fs.mkdirSync(cur_path);
}
};
cur_path = path.join(cur_path, fobj.base);
console.log("current path:" + cur_path);
if (fs.existsSync(cur_path) == false) {
console.log("create dir:" + cur_path);
fs.mkdirSync(cur_path);
}
arguments[arguments.length - 1]();
} else {
fs.writeFile(path.join(__dirname, file_name), zip.files[file_name]._data, arguments[arguments.length - 1]);
}
},
function(err) {
console.log(err || "unzip success");
}
)
}
以上。
沒有留言:
張貼留言