Подготовка к запуску внешних конвертеров, для обработки файлов pdf, doc, epub, mobi и пр.
This commit is contained in:
@@ -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',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ const propsToSave = [
|
|||||||
'maxUploadFileSize',
|
'maxUploadFileSize',
|
||||||
'maxTempPublicDirSize',
|
'maxTempPublicDirSize',
|
||||||
'maxUploadPublicDirSize',
|
'maxUploadPublicDirSize',
|
||||||
|
'useExternalBookConverter',
|
||||||
|
|
||||||
'servers',
|
'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 = [
|
const convertClassFactory = [
|
||||||
|
//require('./ConvertDocX'),
|
||||||
require('./ConvertFb2'),
|
require('./ConvertFb2'),
|
||||||
require('./ConvertSamlib'),
|
require('./ConvertSamlib'),
|
||||||
require('./ConvertHtml'),
|
require('./ConvertHtml'),
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user