mirror of
https://github.com/MCSManager/MCSManager.git
synced 2025-02-17 15:59:41 +08:00
新增 多进程化解压任务
This commit is contained in:
parent
1f25b74f82
commit
4c08e8426d
@ -12,7 +12,7 @@ module.exports.initData = (callback) => {
|
||||
module.exports.init = () => {
|
||||
module.exports.load();
|
||||
//定时清楚
|
||||
setInterval(function() {
|
||||
setInterval(function () {
|
||||
if (new Date().getDate() == 1 && (new Date().getMonth() + 1) >= dataModel.reloadMonth) {
|
||||
dataModel.reloadMonth = (new Date().getMonth() + 2); //调至下个月
|
||||
MCSERVER.log(' ---- 数据期限已到 清空数据统计 ---- ');
|
||||
|
@ -133,12 +133,10 @@ router.post('/extract', (req, res) => {
|
||||
if (!zipName) {
|
||||
res.status(403).send("非法名称");
|
||||
}
|
||||
setTimeout(() => {
|
||||
const fileOperate = new UseFileOperate(req.session.fsos).fileOperate;
|
||||
const cwd = req.session.fsos.cwd;
|
||||
fileOperate.extract(pathm.join(cwd, zipName));
|
||||
}, 0);
|
||||
sendHandle(req, res, true);
|
||||
const fileOperate = new UseFileOperate(req.session.fsos).fileOperate;
|
||||
const cwd = req.session.fsos.cwd;
|
||||
fileOperate.extract(pathm.join(cwd, zipName));
|
||||
sendHandle(req, res, "OK");
|
||||
});
|
||||
|
||||
|
||||
|
38
onlinefs/module/ExtractTaskWorker.js
Normal file
38
onlinefs/module/ExtractTaskWorker.js
Normal file
@ -0,0 +1,38 @@
|
||||
const AdmZip = require('adm-zip');
|
||||
const iconv = require('iconv-lite');
|
||||
const os = require('os');
|
||||
|
||||
let SYSTEM_CODE = null;
|
||||
if (os.platform() == "win32")
|
||||
SYSTEM_CODE = 'GBK';
|
||||
else
|
||||
SYSTEM_CODE = 'UTF-8';
|
||||
|
||||
//参数获取
|
||||
const argv = process.argv;
|
||||
const realArgv = argv.filter((val, index) => {
|
||||
return index >= 2
|
||||
});
|
||||
|
||||
if (realArgv.length == 1) {
|
||||
//解压子进程开始执行
|
||||
console.log('[解压]', '解压', realArgv, '任务开始');
|
||||
|
||||
//执行解压
|
||||
const absPath = realArgv[0];
|
||||
const zip = new AdmZip(absPath);
|
||||
const zipExtractDir = absPath.split('.')[0];
|
||||
zip.extractAllTo(zipExtractDir, true);
|
||||
// 解决目录中中文乱码问题
|
||||
const zipEntries = zip.getEntries();
|
||||
for (let i = 0; i < zipEntries.length; i++) {
|
||||
const entry = zipEntries[i];
|
||||
entry.entryName = iconv.decode(entry.rawEntryName, SYSTEM_CODE);
|
||||
}
|
||||
//全部解压
|
||||
zip.extractAllTo(zipExtractDir, true);
|
||||
|
||||
//解压完成,进程终止
|
||||
console.log('[解压]', '解压', realArgv, '任务结束');
|
||||
process.exit(0);
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
const fs = require("fs");
|
||||
const path_moduel = require("path");
|
||||
// const os = require("os");
|
||||
const cluster = require('cluster');
|
||||
const os = require("os");
|
||||
const {
|
||||
BaseFileOperate
|
||||
} = require("./base_fsoperate");
|
||||
const fsex = require('fs-extra');
|
||||
const AdmZip = require('adm-zip');
|
||||
const iconv = require('iconv-lite');
|
||||
const os = require('os');
|
||||
const child_process = require('child_process');
|
||||
|
||||
let SYSTEM_CODE = null;
|
||||
if (os.platform() == "win32")
|
||||
@ -15,7 +15,6 @@ if (os.platform() == "win32")
|
||||
else
|
||||
SYSTEM_CODE = 'UTF-8';
|
||||
|
||||
|
||||
//文件操作具体
|
||||
class FileOperate extends BaseFileOperate {
|
||||
|
||||
@ -154,22 +153,8 @@ class FileOperate extends BaseFileOperate {
|
||||
//解压文件
|
||||
extract(path) {
|
||||
return this.pathAccessCheck(path, (absPath) => {
|
||||
try {
|
||||
const zip = new AdmZip(absPath);
|
||||
const zipExtractDir = absPath.split('.')[0];
|
||||
// zip.extractAllTo(zipExtractDir, true);
|
||||
// 解决目录中中文乱码问题
|
||||
const zipEntries = zip.getEntries();
|
||||
for (let i = 0; i < zipEntries.length; i++) {
|
||||
const entry = zipEntries[i];
|
||||
entry.entryName = iconv.decode(entry.rawEntryName, SYSTEM_CODE);
|
||||
}
|
||||
zip.extractAllTo(zipExtractDir, true);
|
||||
return true;
|
||||
} catch (err) {
|
||||
console.log("[错误]", "文件解压出错:\n", err);
|
||||
return false;
|
||||
}
|
||||
//分配子进程来进行解压操作
|
||||
child_process.fork("./onlinefs/module/ExtractTaskWorker.js", [absPath]);
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user