diff options
author | bobzel <zzzman@gmail.com> | 2023-09-10 18:11:23 -0400 |
---|---|---|
committer | bobzel <zzzman@gmail.com> | 2023-09-10 18:11:23 -0400 |
commit | 2e32ffaa398f077c5ddc81e950de010199c67c8d (patch) | |
tree | 837574deac74e08d03fc56884bac39e65a308571 | |
parent | b42680588ed48d57f497ff15a18a693bb7ecb9b8 (diff) |
added progress for pdf uploads
-rw-r--r-- | src/client/Network.ts | 5 | ||||
-rw-r--r-- | src/server/ApiManagers/UploadManager.ts | 10 | ||||
-rw-r--r-- | src/server/DashUploadUtils.ts | 15 |
3 files changed, 13 insertions, 17 deletions
diff --git a/src/client/Network.ts b/src/client/Network.ts index 631ec9122..e9f93fad3 100644 --- a/src/client/Network.ts +++ b/src/client/Network.ts @@ -58,11 +58,14 @@ export namespace Networking { ]) ); } + formData.set('fileguids', fileguidpairs.map(pair => pair.guid).join(';')); // If the fileguidpair has a guid to use (From the overwriteDoc) use that guid. Otherwise, generate a new guid. fileguidpairs.forEach(fileguidpair => formData.append(fileguidpair.guid ?? Utils.GenerateGuid(), fileguidpair.file)); } else { // Handle the case where fileguidpairs is a single file. - formData.append(fileguidpairs.guid ?? Utils.GenerateGuid(), fileguidpairs.file); + const guids = fileguidpairs.guid ?? Utils.GenerateGuid(); + formData.set('fileguids', guids); + formData.append(guids, fileguidpairs.file); } const parameters = { method: 'POST', diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts index 854911277..4509425bb 100644 --- a/src/server/ApiManagers/UploadManager.ts +++ b/src/server/ApiManagers/UploadManager.ts @@ -64,13 +64,18 @@ export default class UploadManager extends ApiManager { subscription: '/uploadFormData', secureHandler: async ({ req, res }) => { const form = new formidable.IncomingForm(); - console.log('RECEIVED form: '); + let fileguids = ''; + form.on('field', (e: string, value: string) => { + if (e === 'fileguids') { + (fileguids = value).split(';').map(guid => DashUploadUtils.uploadProgress.set(guid, 'reading file')); + } + }); + form.on('progress', e => fileguids.split(';').map(guid => DashUploadUtils.uploadProgress.set(guid, 'read: ' + e))); form.keepExtensions = true; form.uploadDir = pathToDirectory(Directory.parsed_files); return new Promise<void>(resolve => { form.parse(req, async (_err, _fields, files) => { const results: Upload.FileResponse[] = []; - console.log('Parsed files: '); if (_err?.message) { results.push({ source: { @@ -86,7 +91,6 @@ export default class UploadManager extends ApiManager { for (const key in files) { const f = files[key]; if (!Array.isArray(f)) { - console.log('uploading file...', f.name); const result = await DashUploadUtils.upload(f, key); // key is the guid used by the client to track upload progress. result && !(result.result instanceof Error) && results.push(result); } diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts index 5187d0d6f..15678bd8d 100644 --- a/src/server/DashUploadUtils.ts +++ b/src/server/DashUploadUtils.ts @@ -140,7 +140,7 @@ export namespace DashUploadUtils { return uploadProgress.get(videoId) ?? 'pending data upload'; } - let uploadProgress = new Map<string, string>(); + export let uploadProgress = new Map<string, string>(); export function uploadYoutube(videoId: string, overwriteId: string): Promise<Upload.FileResponse> { return new Promise<Upload.FileResponse<Upload.FileInformation>>((res, rej) => { @@ -197,7 +197,6 @@ export namespace DashUploadUtils { const isAzureOn = usingAzure(); const { type, path, name } = file; const types = type?.split('/') ?? []; - console.log('UPLOADING:' + (overwriteGuid ?? name)); uploadProgress.set(overwriteGuid ?? name, 'uploading'); // If the client sent a guid it uses to track upload progress, use that guid. Otherwise, use the file's name. const category = types[0]; @@ -282,7 +281,6 @@ export namespace DashUploadUtils { } async function UploadPdf(file: File) { - console.log('upload pdf', file.name); const fileKey = (await md5File(file.path)) + '.pdf'; const textFilename = `${fileKey.substring(0, fileKey.length - 4)}.txt`; if (fExists(fileKey, Directory.pdfs) && fExists(textFilename, Directory.text)) { @@ -291,25 +289,16 @@ export namespace DashUploadUtils { const textFilename = `${fileKey.substring(0, fileKey.length - 4)}.txt`; const readStream = createReadStream(serverPathToFile(Directory.text, textFilename)); var rawText = ''; - console.log('reading stream', file); - readStream - .on('data', chunk => { - console.log('Got chunk:' + chunk.size); - rawText += chunk.toString(); - }) - .on('end', () => res(resolveExistingFile(file.name, fileKey, Directory.pdfs, file.type, undefined, rawText))); + readStream.on('data', chunk => (rawText += chunk.toString())).on('end', () => res(resolveExistingFile(file.name, fileKey, Directory.pdfs, file.type, undefined, rawText))); }); } const dataBuffer = readFileSync(file.path); const result: ParsedPDF | any = await parse(dataBuffer).catch((e: any) => e); if (!result.code) { await new Promise<void>((resolve, reject) => { - console.log('Got text write stream', file.name); const writeStream = createWriteStream(serverPathToFile(Directory.text, textFilename)); writeStream.write(result?.text, error => (error ? reject(error) : resolve())); - console.log('write text stream', file.name); }); - console.log('moving', file.name); return MoveParsedFile(file, Directory.pdfs, undefined, result?.text, undefined, fileKey); } return { source: file, result: { name: 'faile pdf pupload', message: `Could not upload (${file.name}).${result.message}` } }; |