首先npm下载需要的包
$ npm install unzipper$ npm install iconv-lite
iconv-lite是为了正常显示中文字符,解决中文乱码
常规zip解压
function unZip(zipPath, extractPath) {
fs.createReadStream(zipPath)
.pipe(unzipper.Parse()) //.pipe(unzipper.Extract({ path: 'output/path' }));
.on('entry', function (entry) {console.log(entry)
const tmpFilePath = extractPath + "/" + iconv.decode(entry.props.pathBuffer, 'gbk');
const type = entry.type; // 'Directory' or 'File'
if (type === "File") {
entry.pipe(fs.createWriteStream(tmpFilePath));
} else if(type === "Directory" && !fs.existsSync(tmpFilePath)) {
fs.mkdirSync(tmpFilePath);
}
})
.promise().then(function (e) {
if (!e) {
console.log("解压成功");
}
})
}
unZip('./abc.zip', './temp');
加密zip解压(发现大文件超慢,不知啥问题):
function unZipmi(zipPath, extractPath, password) {
unzipper.Open.file(zipPath).then((d) => {
return new Promise((resolve, reject) => {
for (i = 0; i < d.files.length; i++) {
const file = d.files[i]; console.log(file)
const tmpFilePath = extractPath + "/" + iconv.decode(file.pathBuffer, 'gbk');
if (file.type == "File") {
d.files[i].stream(password)
.pipe(fs.createWriteStream(tmpFilePath))
.on('finish', () => resolve(tmpFilePath))
.on('error', reject);
} else if (file.type == "Directory" && !fs.existsSync(tmpFilePath)) {
fs.mkdirSync(tmpFilePath);
}
}
})
}).then((path) => {
console.log('file(s) written to ' + path);
}).catch((e) => {
console.log('error while processing archive', e);
});
}
unZipmi('./un.zip', './temp', "abc123");
王
我后面用cmd命令调用winrar.exe解压的方式处理了,提供博主一个思路,感谢博主的指导, 有兴趣可以看下:https://blog.csdn.net/wanglei19880622/article/details/114387077
夕空
@王 : 感谢,先标记下,若以后遇到此项目问题会想起你
王
你好,请问大文件加密解压慢的问题有解决么?找了很多都没有看到
夕空
@王 : 没有解决,最终还是用Node.js程序加密解密文件
http://www.flashme.cn/index.php/web/50.html
这种办法无法当做压缩包发给他人
王
@夕空 : 好的,谢谢~