electron中使用7-Zip解压文件流程
因为项目要提供下载后的zip文件解压给ue热加载使用,之前使用了好多node依赖去解压zip包,但是出现了很多奇怪的错误,类似compressing不使用它去压缩文件会报一些磁盘问题,admzip解压会报一些header错误,刚刚接触node这块东西,很多都不太了解,所以使用了7-zip官方的一个依赖包,直接命令行运行解压
官网链接:
https://sparanoid.com/lab/7z/sdk.html
使用了下面这个包,直接安装在了我的electron项目目录中,为了方便命令行去运行7z.exe
下面是具体使用的函数调用
参数根据具体情况替换
const fs = require('fs');
const child = require('child_process');
const path = require('path');
/**
* 记录正在下载的文件
* @shopMsg 渲染进程回传当前需要下载的文件信息
* @electronWindow 当前渲染进程的窗口参数
*/
function decompression(shopMsg, electronWindow) {
return new Promise((resolve) => {
//判断下载文件属于那个类型(创建对应的文件夹名称)
let FileType = '';
if (shopMsg.resourceType == 'role_model') {
FileType = 'avatar';
} else {
FileType = 'other';
}
//解压文件的目标路径
const localFilePath = path.join(__dirname, '../resources/Bundles/' + shopMsg.resourceCode + '/' + shopMsg.resourceCode + '.zip');
//想要解压完成之后保存文件的路径
const FilePath = path.join(__dirname, '../resources/DownLoad/' + FileType + '/' + shopMsg.resourceCode);
//安装在项目中的7zip应用文件路径
const WinRAROath = path.join(__dirname, '../7ZIP/7-Zip/7z.exe');
if (!fs.existsSync(localFilePath)) {
resolve('不存在目标解压文件!');
electronWindow.webContents.send('decompression', 'fail', shopMsg.resourceCode);//渲染进程状态变化的回调
return;
}
if (fs.existsSync(FilePath)) {
console.log('解压文件已存在');
} else {
console.log('创建解压文件夹');
fs.mkdirSync(FilePath);
//x:完整路径下解压文件 -y:所有确认选项都默认为是(即不出现确认提示) -o:设置输出目录
child.exec(WinRAROath + ' x -y -o' + FilePath + ' ' + localFilePath, (error, stdout, stderr) => {
if (error) throw error;
else console.log('解压成功'); electronWindow.webContents.send('decompression', 'success', shopMsg.resourceCode);//渲染进程状态变化的回调
});
}
});
}
module.exports = { decompression };
完成~