diff --git a/package.json b/package.json index 7217f1683199c03d278e5c4545690fcfa6138e29..3464b0cbc3d97b3368609dd1d717371518ece815 100755 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "request-promise": "^4.2.4", "rfr": "^1.2.3", "rimraf": "^2.6.3", + "stream-to-array": "^2.3.0", "supertest": "^3.0.0", "tar": "^4.4.8", "tar-fs": "^1.16.3", diff --git a/server/xpub-server/entities/file/uploadFiles.js b/server/xpub-server/entities/file/uploadFiles.js index 9086c90afda39d3f7c9f8a4d1e7154260789b101..f22b1e52408b9c33fa17ea5c116c673f0d2dea81 100644 --- a/server/xpub-server/entities/file/uploadFiles.js +++ b/server/xpub-server/entities/file/uploadFiles.js @@ -4,8 +4,12 @@ const config = require('config') const rfr = require('rfr') const { minioClient } = require('express-middleware-minio') const { timer } = require('benmark') +const fs = require('fs') const FileModel = rfr('server/xpub-model/entities/file/data-access') +const tar = rfr('server/utils/unTar') +const fileUtil = rfr('server/utils/files') +const { xsweetConvert } = rfr('server/xsweet-conversion') const extractFileExtension = filename => { if (filename) { @@ -14,17 +18,31 @@ const extractFileExtension = filename => { return '' } -const handleFile = async file => { +const handleFile = async (file, manuscriptId, type) => { const { stream, filename, mimetype } = await file let newFilename = uuidv1() + let extension = '' + if (filename) { - const extension = extractFileExtension(filename) + extension = extractFileExtension(filename) if (extension) { newFilename += `.${extension}` } } + // case when manuscript is a docx file + if (type === 'manuscript' && extension === 'docx') { + const tmpPath = await tar.createTempDir() + const wstreamTmp = fs.createWriteStream(`${tmpPath}/${filename}`) + stream.pipe(wstreamTmp) + wstreamTmp.on('finish', async () => { + await xsweetConvert(`${tmpPath}/${filename}`, manuscriptId) + logger.info('xsweet conversion is DONE!') + fileUtil.tidyUp(tmpPath) + }) + } + try { await timer(`S3 uploading file ${filename}`)(minioClient.uploadFileSteam)( newFilename, @@ -40,10 +58,15 @@ const handleFile = async file => { async function uploadFiles(_, { id, files, type = '' }, { user }) { const resolvedFiles = await files + const savedFiles = [] await Promise.all( resolvedFiles.map(async resolvedFile => { - const { err, filename, url, mimetype } = await handleFile(resolvedFile) + const { err, filename, url, mimetype } = await handleFile( + resolvedFile, + id, + type, + ) if (err || !filename) { logger.error('Minio error: ', err) return @@ -61,6 +84,7 @@ async function uploadFiles(_, { id, files, type = '' }, { user }) { const savedFile = await file.save() logger.debug('savedFile: ', savedFile) savedFiles.push(savedFile) + // xsweetConvert() }), ) diff --git a/yarn.lock b/yarn.lock index 80bf8855e860155223e7448e2d154b82841c03d9..0ed77bae365e3512a7f9a6529b835b9bf3bc09ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1017,6 +1017,11 @@ any-observable@^0.2.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" integrity sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI= +any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -13191,6 +13196,13 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +stream-to-array@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" + integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= + dependencies: + any-promise "^1.1.0" + stream-to-observable@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"