新增 删除与解压全部多进程化

This commit is contained in:
Suwings 2019-09-17 15:04:35 +08:00
parent b11c7b300f
commit 11933c4a24
3 changed files with 62 additions and 52 deletions

View File

@ -1,38 +0,0 @@
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

@ -0,0 +1,52 @@
const AdmZip = require('adm-zip');
const iconv = require('iconv-lite');
const fsex = require('fs-extra');
const os = require('os');
const path = require('path');
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) {
const ACTION = realArgv[0];
//解压子进程开始执行
if (ACTION === 'extract') {
//执行解压
const absPath = realArgv[1];
const zip = new AdmZip(absPath);
//目录名与原文件同名
const zipExtractDir = path.normalize(
path.dirname(absPath) + '/解压文件_' + path.basename(absPath, path.extname(absPath))
);
console.log('[ 解压任务 ]', '解压', realArgv[1], '任务开始\n', '解压到:', zipExtractDir);
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[1], '任务结束');
}
//文件删除子进程开始执行
if (ACTION === 'remove') {
console.log('[ 删除任务 ]', '删除:', realArgv[1]);
fsex.removeSync(realArgv[1])
}
process.exit(0);
}

View File

@ -6,14 +6,8 @@ const {
BaseFileOperate
} = require("./base_fsoperate");
const fsex = require('fs-extra');
const AdmZip = require('adm-zip');
const child_process = require('child_process');
let SYSTEM_CODE = null;
if (os.platform() == "win32")
SYSTEM_CODE = 'GBK';
else
SYSTEM_CODE = 'UTF-8';
//文件操作具体
class FileOperate extends BaseFileOperate {
@ -88,13 +82,15 @@ class FileOperate extends BaseFileOperate {
rm(path) {
this.pathAccessCheck(path, (absPath) => {
// if (fs.statSync(absPath).isDirectory()) {
// this._rm_rf(absPath);
// }
// fs.unlinkSync(absPath);
fsex.remove(absPath, (err) => {
if (err) return;
});
//如果仅单文件则直接删除
if (!fs.statSync(absPath).isDirectory()) {
fsex.remove(absPath, (err) => {
if (err) return;
});
} else {
//若删除文件夹则分配子进程来进行解压操作
child_process.fork("./onlinefs/module/extend_worker.js", ['remove', absPath]);
}
});
}
@ -155,7 +151,7 @@ class FileOperate extends BaseFileOperate {
extract(path) {
return this.pathAccessCheck(path, (absPath) => {
//分配子进程来进行解压操作
child_process.fork("./onlinefs/module/ExtractTaskWorker.js", [absPath]);
child_process.fork("./onlinefs/module/extend_worker.js", ['extract', absPath]);
});
}