UNPKG

file-zip

Version:

The file folder compression, decompression of the compressed package

106 lines (94 loc) 2.91 kB
/** * Created by chenqifeng on 2017/3/1. */ var fs = require("fs"), filesTree = require('files-tree'), zip = require("node-native-zip"), decompress = require('decompress'), decompressUnzip = require('decompress-unzip'); /** * 压缩指定路径下的所有文件及文件夹 * @param paths string or array 指定的压缩路径,可以是多个 * @param name 压缩后的文件名及文件路径 * @param callback 压缩成功后的回调函数 */ exports.zipFolder = function (paths, name, callback) { paths = paramToArray(paths); name = name || Date.now() + '.zip'; callback = callback || function () { }; var list = [], files = [], archive = new zip(); paths.forEach(function (i) { list = list.concat(filesTree.allFile(i)); }); list.forEach(function (item) { item.file && files.push({path: item.path, name: item.path.replace(/^(\.\/|\.|\/)/, '')}) }); archive.addFiles(files, function (err) { if (err) { callback(err) } else { var buff = archive.toBuffer(); fs.writeFile(name, buff, callback); } }); }; /** * 压缩指定的文件 * @param files string or array 指定的文件,可以是多个 * @param name 压缩后的文件名及文件路径 * @param callback 压缩成功后的回调函数 */ exports.zipFile = function (files, name, callback) { files = paramToArray(files); name = name || Date.now() + '.zip'; callback = callback || function () { }; var state, i, error, list = [], archive = new zip(); for (i = 0; i < files.length; i++) { state = fs.statSync(files[i]); if (state.isDirectory()) { error = new Error(files[i] + ' is a folder,is not a file'); callback(error); break; } else { list.push({ name: files[i].split('/')[files[i].split('/').length - 1], path: files[i] }) } } if (error) { return; } archive.addFiles(list, function (err) { if (err) { callback(err) } else { var buff = archive.toBuffer(); fs.writeFile(name, buff, callback); } }); }; exports.unzip = function (name, folderPath,callback) { folderPath = folderPath || './' callback = callback || function(){}; decompress(name, folderPath, { plugins: [ decompressUnzip() ] }).then(function(data){ callback(null,data); }).catch(function(e){ callback(e); }) }; function paramToArray(param) { if (Array.isArray(param)) { return param } else if (typeof param === 'string') { return [param] } else { return []; } }