Подготовка к запуску внешних конвертеров, для обработки файлов pdf, doc, epub, mobi и пр.

This commit is contained in:
Book Pauk
2019-02-27 17:48:37 +07:00
parent 8219e19c1b
commit a96eb50784
5 changed files with 63 additions and 2 deletions

View File

@@ -21,6 +21,8 @@ module.exports = {
maxTempPublicDirSize: 512*1024*1024,//512Мб maxTempPublicDirSize: 512*1024*1024,//512Мб
maxUploadPublicDirSize: 200*1024*1024,//100Мб maxUploadPublicDirSize: 200*1024*1024,//100Мб
useExternalBookConverter: false,
servers: [ servers: [
{ {
serverName: '1', serverName: '1',

View File

@@ -5,6 +5,7 @@ const propsToSave = [
'maxUploadFileSize', 'maxUploadFileSize',
'maxTempPublicDirSize', 'maxTempPublicDirSize',
'maxUploadPublicDirSize', 'maxUploadPublicDirSize',
'useExternalBookConverter',
'servers', 'servers',
]; ];

View File

@@ -0,0 +1,18 @@
const ConvertBase = require('./ConvertBase');
class ConvertDocX extends ConvertBase {
check(data, opts) {
const {fileType} = opts;
return (fileType && fileType.ext == 'docx' && this.config.useExternalBookConverter);
}
run(data, opts) {
if (!this.check(data, opts))
return false;
return data;
}
}
module.exports = ConvertDocX;

View File

@@ -3,6 +3,7 @@ const FileDetector = require('../FileDetector');
//порядок важен //порядок важен
const convertClassFactory = [ const convertClassFactory = [
//require('./ConvertDocX'),
require('./ConvertFb2'), require('./ConvertFb2'),
require('./ConvertSamlib'), require('./ConvertSamlib'),
require('./ConvertHtml'), require('./ConvertHtml'),

View File

@@ -1,3 +1,4 @@
const { spawn } = require('child_process');
const fs = require('fs-extra'); const fs = require('fs-extra');
const crypto = require('crypto'); const crypto = require('crypto');
@@ -13,8 +14,46 @@ async function touchFile(filename) {
await fs.utimes(filename, Date.now()/1000, Date.now()/1000); await fs.utimes(filename, Date.now()/1000, Date.now()/1000);
} }
function spawnProcess(cmd, opts) {
let {args, killAfter, onData} = opts;
killAfter = (killAfter ? killAfter : 30*1000);
onData = (onData ? onData : () => {});
args = (args ? args : []);
return new Promise(async(resolve, reject) => {
let resolved = false;
const proc = spawn(cmd, args);
let stdout = '';
proc.stdout.on('data', (data) => {
stdout += data;
onData(data);
});
let stderr = '';
proc.stderr.on('data', (data) => {
stderr += data;
onData(data);
});
proc.on('close', (code) => {
resolved = true;
resolve({status: 'close', code, stdout, stderr});
});
proc.on('error', (error) => {
reject({status: 'error', error, stdout, stderr});
});
await sleep(killAfter);
if (!resolved)
reject({status: 'killed', stdout, stderr});
});
}
module.exports = { module.exports = {
sleep, sleep,
randomHexString, randomHexString,
touchFile touchFile,
spawnProcess
}; };