nodejs/electron 解压加密zip 压缩包方法

方法一:使用node-unzipper 加密压缩包的解压,这个的话这个博客上写的很好,我开始就是用他的方法做的

上诉方法有个很大的缺陷,博主也指出来了,就是加密解压大文件会很慢,这个我测试的时候,发现一个不大的文件(解压前1M多,解压后5M左右)也要花费1,2分钟,显然这个效果有点难接受,后面尝试找了很多方法都不太满意,加密解压的第三方模块比较慢,后面发现在本地解压还是挺快的,就想到用内部进程开个cmd命令调用winrar.exe去解压,后面摸索着实现了,记录下提供给后面需要的同学,这个方法可能存在其他的一些缺陷,但是解压速度已经达到了可以接受的范围。

方法二:调用cmd命令调用winrar.exe实现解压。

封装一个cmd解压命令方法 unzipCMD.js (解压命令参数可自行调改 ,可在cmd中查看 C:\Program Files\WinRAR>rar.exe -?     C:\Program Files\WinRAR>unrar.exe -?)

const exec = require('child_process').exec
//cmdPath:winrar.exe路径
//zipPath:压缩包文件
//outPath:解压文件目录
//加密密码
function unzipCmd (cmdPath,zipPath,outPath,pwd) {
    // 任何你期望执行的cmd命令,ls都可以
    
    let cmdStr1 = 'WinRAR.exe -ibck -y x -t -p'+pwd+' "'+zipPath+'"  "'+outPath+'"'
    //let cmdPath = cmdPath
    // 子进程名称
    console.log(cmdStr1);
    let workerProcess
    return runExec(cmdStr1)
    function runExec (cmdStr) {
        return new Promise((_resolve, _reject) => { 
            var _result = 1;
            workerProcess = exec(cmdStr, { cwd: cmdPath })
            // 打印正常的后台可执行程序输出
            workerProcess.stdout.on('data', function (data) {
                console.log('stdout: ' + data)
                
            })
            // 打印错误的后台可执行程序输出
            workerProcess.stderr.on('data', function (data) {
                console.log('stderr: ' + data)
                _result = 0;
                _reject();
            })
            // 退出之后的输出
            workerProcess.on('close', function (code) {
                console.log('out code:' + code)
                _resolve(_result)
            })
        });
    }
}

module.exports = {
    "unzipCmd": unzipCmd
};

调用方法(以electron子页面调用为例)

<!DOCTYPE html>
<html lang="en">
 
<head>
  <title>myapp</title>
  <script>window.$ = window.jQuery = require("./js/jquery.min");</script>
</head>
 
<body>
  <p>demo</p>

  <script>
	var fs= require("fs")
    var unzipCMD = require('./unzipCMD');
	
    $(function(){
	  var outPath = 'E:/Node_js/demo';//文件夹路径是否需要创建
      if (!fs.existsSync(outPath)) {
          fs.mkdirSync(outPath);
      }
	  
     unzipCMD.unzipCmd("C:/Program Files/WinRAR",'E:/Node_js/demo/xxx.zip', outPath, "abc")
      .then(function (e) {
        console.log(e);
      })  
    }
  </script>
</body>
 
</html>

若是存在安全性错误提示,可以参考下面的配置

win = new BrowserWindow({ 
    width: 1200, 
    height: 600 ,
    webPreferences: { //js交互
        nodeIntegration: true, 
        enableRemoteModule:true,
        webSecurity: false, //禁用同源策略 
        plugins: true, //是否支持插件  
        nativeWindowOpen: true, //是否使用原生的window.open() 
        webviewTag: true, //是否启用 <webview> tag标签 
        sandbox: false,    
        enableRemoteModule:true,
    },
  })

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值