aboutsummaryrefslogtreecommitdiff
path: root/src/server/ApiManagers/UploadManager.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/ApiManagers/UploadManager.ts')
-rw-r--r--src/server/ApiManagers/UploadManager.ts67
1 files changed, 24 insertions, 43 deletions
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 4cb3d8baf..868373474 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -1,20 +1,18 @@
import * as AdmZip from 'adm-zip';
import * as formidable from 'formidable';
import * as fs from 'fs';
-import { createReadStream, createWriteStream, unlink } from 'fs';
+import { unlink } from 'fs';
import * as imageDataUri from 'image-data-uri';
-import Jimp from 'jimp';
import * as path from 'path';
import * as uuid from 'uuid';
import { retrocycle } from '../../decycler/decycler';
import { DashVersion } from '../../fields/DocSymbols';
-import { DashUploadUtils, InjectSize, SizeSuffix } from '../DashUploadUtils';
+import { DashUploadUtils, InjectSize, SizeSuffix, workerResample } from '../DashUploadUtils';
import { Method, _success } from '../RouteManager';
import { AcceptableMedia, Upload } from '../SharedMediaTypes';
-import { clientPathToFile, Directory, pathToDirectory, publicDirectory, serverPathToFile } from '../SocketData';
+import { Directory, clientPathToFile, pathToDirectory, publicDirectory, serverPathToFile } from '../SocketData';
import { Database } from '../database';
import ApiManager, { Registration } from './ApiManager';
-import { SolrManager } from './SearchManager';
export default class UploadManager extends ApiManager {
protected initialize(register: Registration): void {
@@ -144,7 +142,7 @@ export default class UploadManager extends ApiManager {
ids[id] = uuid.v4();
return ids[id];
};
- const mapFn = (docIn: any) => {
+ const mapFn = (docIn: { id: string; fields: any[] }) => {
const doc = docIn;
if (doc.id) {
doc.id = getId(doc.id);
@@ -170,10 +168,10 @@ export default class UploadManager extends ApiManager {
mapFn(field);
} else if (typeof field === 'string') {
const re = /("(?:dataD|d)ocumentId"\s*:\s*")([\w-]*)"/g;
- doc.fields[key] = (field as any).replace(re, (match: any, p1: string, p2: string) => `${p1}${getId(p2)}"`);
+ doc.fields[key] = field.replace(re, (match: string, p1: string, p2: string) => `${p1}${getId(p2)}"`);
} else if (field.__type === 'RichTextField') {
const re = /("href"\s*:\s*")(.*?)"/g;
- field.Data = field.Data.replace(re, (match: any, p1: string, p2: string) => `${p1}${getId(p2)}"`);
+ field.Data = field.Data.replace(re, (match: string, p1: string, p2: string) => `${p1}${getId(p2)}"`);
}
}
};
@@ -185,35 +183,26 @@ export default class UploadManager extends ApiManager {
let linkids: string[] = [];
try {
// eslint-disable-next-line no-restricted-syntax
- for (const name in Object.keys(files)) {
+ for (const name in files) {
if (Object.prototype.hasOwnProperty.call(files, name)) {
const f = files[name];
// eslint-disable-next-line no-continue
if (!f) continue;
const path2 = f[0]; // what about the rest of the array? are we guaranteed only one value is set?
const zip = new AdmZip(path2.filepath);
- zip.getEntries().forEach((entry: any) => {
+ zip.getEntries().forEach(entry => {
const entryName = entry.entryName.replace(/%%%/g, '/');
- if (!entryName.startsWith('files/')) {
- return;
- }
- const extension = path.extname(entryName);
- const pathname = publicDirectory + '/' + entry.entryName;
- const targetname = publicDirectory + '/' + entryName;
- try {
- zip.extractEntryTo(entry.entryName, publicDirectory, true, false);
- createReadStream(pathname).pipe(createWriteStream(targetname));
- Jimp.read(pathname).then(imgIn => {
- let img = imgIn;
- DashUploadUtils.imageResampleSizes(extension).forEach(({ width, suffix }) => {
- const outputPath = InjectSize(targetname, suffix);
- if (!width) createReadStream(pathname).pipe(createWriteStream(outputPath));
- else img = img.resize(width, Jimp.AUTO).write(outputPath);
- });
- unlink(pathname, () => {});
- });
- } catch (e) {
- console.log(e);
+ if (entryName.startsWith('files/')) {
+ const pathname = publicDirectory + '/' + entry.entryName;
+ const targetname = publicDirectory + '/' + entryName;
+ try {
+ zip.extractEntryTo(entry.entryName, publicDirectory, true, false);
+ const extension = path.extname(targetname).toLowerCase();
+ const basefilename = targetname.substring(0, targetname.length - extension.length);
+ workerResample(pathname, basefilename.replace(/_o$/, '') + extension, SizeSuffix.Original, true);
+ } catch (e) {
+ console.log(e);
+ }
}
});
const json = zip.getEntry('docs.json');
@@ -244,8 +233,7 @@ export default class UploadManager extends ApiManager {
unlink(path2.filepath, () => {});
}
}
- SolrManager.update();
- res.send(JSON.stringify({ id, docids, linkids } || 'error'));
+ res.send(JSON.stringify({ id, docids, linkids }) || 'error');
} catch (e) {
console.log(e);
}
@@ -282,21 +270,14 @@ export default class UploadManager extends ApiManager {
const serverPath = serverPathToFile(Directory.images, '');
const regex = new RegExp(`${deleteFiles}.*`);
fs.readdirSync(serverPath)
- .filter((f: any) => regex.test(f))
- .map((f: any) => fs.unlinkSync(serverPath + f));
+ .filter(f => regex.test(f))
+ .map(f => fs.unlinkSync(serverPath + f));
}
imageDataUri.outputFile(uri, serverPathToFile(Directory.images, InjectSize(filename, origSuffix))).then((savedName: string) => {
const ext = path.extname(savedName).toLowerCase();
+ const outputPath = serverPathToFile(Directory.images, filename + ext);
if (AcceptableMedia.imageFormats.includes(ext)) {
- Jimp.read(savedName).then(imgIn => {
- let img = imgIn;
- (!origSuffix ? [{ width: 400, suffix: SizeSuffix.Medium }] : Object.values(DashUploadUtils.Sizes)) //
- .forEach(({ width, suffix }) => {
- const outputPath = serverPathToFile(Directory.images, InjectSize(filename, suffix) + ext);
- if (!width) createReadStream(savedName).pipe(createWriteStream(outputPath));
- else img = img.resize(width, Jimp.AUTO).write(outputPath);
- });
- });
+ workerResample(savedName, outputPath, origSuffix, false);
}
res.send(clientPathToFile(Directory.images, filename + ext));
});