aboutsummaryrefslogtreecommitdiff
path: root/src/server/DashUploadUtils.ts
diff options
context:
space:
mode:
authorSophie Zhang <sophie_zhang@brown.edu>2024-02-22 10:22:58 -0500
committerSophie Zhang <sophie_zhang@brown.edu>2024-02-22 10:22:58 -0500
commit3f33a680af31a04b58c6163fda53a80a737837c6 (patch)
treeb84da40da1c13c8ab8ab8cd763b69ac5b39ce93c /src/server/DashUploadUtils.ts
parent70cf5ad795055c1f628c918b08a13a96e4ab89a6 (diff)
parentcf85ee4ea73985529a16321d671d893ddb862439 (diff)
Merge branch 'master' into sophie-ai-images
Diffstat (limited to 'src/server/DashUploadUtils.ts')
-rw-r--r--src/server/DashUploadUtils.ts25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index b1a7a9c5e..307aec6fc 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -14,7 +14,7 @@ import * as path from 'path';
import { basename } from 'path';
import * as parse from 'pdf-parse';
import * as request from 'request-promise';
-import { Duplex } from 'stream';
+import { Duplex, Stream } from 'stream';
import { filesDirectory, publicDirectory } from '.';
import { Utils } from '../Utils';
import { Opt } from '../fields/Doc';
@@ -349,10 +349,8 @@ export namespace DashUploadUtils {
if (metadata instanceof Error) {
return { name: metadata.name, message: metadata.message };
}
- const outputFile = filename || metadata.filename;
- if (!outputFile) {
- return { name: source, message: 'output file not found' };
- }
+ const outputFile = filename || metadata.filename || '';
+
return UploadInspectedImage(metadata, outputFile, prefix);
};
@@ -552,7 +550,22 @@ export namespace DashUploadUtils {
writtenFiles = {};
}
} else {
- writtenFiles = await outputResizedImages(metadata.source, resolved, pathToDirectory(Directory.images));
+ try {
+ writtenFiles = await outputResizedImages(metadata.source, resolved, pathToDirectory(Directory.images));
+ } catch (e) {
+ // input is a blob or other, try reading it to create a metadata source file.
+ const reqSource = request(metadata.source);
+ let readStream: Stream = reqSource instanceof Promise ? await reqSource : reqSource;
+ const readSource = `${prefix}upload_${Utils.GenerateGuid()}.${metadata.contentType.split('/')[1].toLowerCase()}`;
+ await new Promise<void>((res, rej) =>
+ readStream
+ .pipe(createWriteStream(readSource))
+ .on('close', () => res())
+ .on('error', () => rej())
+ );
+ writtenFiles = await outputResizedImages(readSource, resolved, pathToDirectory(Directory.images));
+ fs.unlink(readSource, err => console.log("Couldn't unlink temporary image file:" + readSource));
+ }
}
for (const suffix of Object.keys(writtenFiles)) {
information.accessPaths[suffix] = getAccessPaths(images, writtenFiles[suffix]);