新增 多进程化解压任务

This commit is contained in:
Suwings 2019-09-17 14:06:03 +08:00
parent 1f25b74f82
commit 4c08e8426d
4 changed files with 48 additions and 27 deletions

View File

@ -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(' ---- 数据期限已到 清空数据统计 ---- ');

View File

@ -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");
});

View 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);
}

View File

@ -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]);
});
}