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, } })