Подготовка к запуску внешних конвертеров, для обработки файлов pdf, doc, epub, mobi и пр.
This commit is contained in:
@@ -21,6 +21,8 @@ module.exports = {
|
||||
maxTempPublicDirSize: 512*1024*1024,//512Мб
|
||||
maxUploadPublicDirSize: 200*1024*1024,//100Мб
|
||||
|
||||
useExternalBookConverter: false,
|
||||
|
||||
servers: [
|
||||
{
|
||||
serverName: '1',
|
||||
|
||||
@@ -5,6 +5,7 @@ const propsToSave = [
|
||||
'maxUploadFileSize',
|
||||
'maxTempPublicDirSize',
|
||||
'maxUploadPublicDirSize',
|
||||
'useExternalBookConverter',
|
||||
|
||||
'servers',
|
||||
];
|
||||
|
||||
18
server/core/BookConverter/ConvertDocX.js
Normal file
18
server/core/BookConverter/ConvertDocX.js
Normal 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;
|
||||
@@ -3,6 +3,7 @@ const FileDetector = require('../FileDetector');
|
||||
|
||||
//порядок важен
|
||||
const convertClassFactory = [
|
||||
//require('./ConvertDocX'),
|
||||
require('./ConvertFb2'),
|
||||
require('./ConvertSamlib'),
|
||||
require('./ConvertHtml'),
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
const { spawn } = require('child_process');
|
||||
const fs = require('fs-extra');
|
||||
const crypto = require('crypto');
|
||||
|
||||
@@ -13,8 +14,46 @@ async function touchFile(filename) {
|
||||
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 = {
|
||||
sleep,
|
||||
randomHexString,
|
||||
touchFile
|
||||
touchFile,
|
||||
spawnProcess
|
||||
};
|
||||
Reference in New Issue
Block a user