From efc309ed6ad608a68788f6bddb5440d7f6cb18c2 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Mon, 16 Jun 2025 20:39:49 +0000 Subject: [PATCH] handle progress of putObject s3 --- packages/server/classes/Upload/index.ts | 1 + packages/server/classes/Upload/putObject.js | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/server/classes/Upload/index.ts b/packages/server/classes/Upload/index.ts index b2d42eab..673a57ff 100644 --- a/packages/server/classes/Upload/index.ts +++ b/packages/server/classes/Upload/index.ts @@ -132,6 +132,7 @@ export default class Upload { metadata: metadata, targetFilename: isDirectory ? path.basename(targetPath) : null, provider: s3Provider, + onProgress: onProgress, }) return result diff --git a/packages/server/classes/Upload/putObject.js b/packages/server/classes/Upload/putObject.js index 91c81f74..aa0cf7f2 100644 --- a/packages/server/classes/Upload/putObject.js +++ b/packages/server/classes/Upload/putObject.js @@ -8,6 +8,7 @@ export default async function putObject({ metadata = {}, targetFilename, onFinish, + onProgress, provider = "standard", }) { const providerClass = global.storages[provider] @@ -22,6 +23,18 @@ export default async function putObject({ if (isDirectory) { let files = await fs.promises.readdir(filePath) + let count = 0 + + const handleProgress = () => { + if (typeof onProgress === "function") { + count = count + 1 + + onProgress({ + percent: Math.round((count / files.length) * 100), + state: "uploading_s3", + }) + } + } files = files.map((file) => { const newPath = path.join(filePath, file) @@ -29,6 +42,8 @@ export default async function putObject({ return { filePath: newPath, uploadPath: path.join(uploadPath, file), + provider: provider, + onFinish: handleProgress, } })