From 2b43dc7491cdcd20b63e7e8110ca82fecd81d692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Vaill=C3=A9?= Date: Tue, 16 Jun 2026 17:07:49 +0200 Subject: [PATCH] Fix: handle upload stream with unknown size --- src/internal/client.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/internal/client.ts b/src/internal/client.ts index 823b6e7a..38159d6a 100644 --- a/src/internal/client.ts +++ b/src/internal/client.ts @@ -1800,22 +1800,20 @@ export class TypedClient { chunkier.on('end', resolve).on('error', reject) }), (async () => { - let partNumber = 1 + let partNumber = 0 for await (const chunk of chunkier) { const md5 = crypto.createHash('md5').update(chunk).digest() + partNumber++ const oldPart = oldParts[partNumber] if (oldPart) { if (oldPart.etag === md5.toString('hex')) { eTags.push({ part: partNumber, etag: oldPart.etag }) - partNumber++ continue } } - partNumber++ - // now start to upload missing part const options: RequestOption = { method: 'PUT', @@ -1840,6 +1838,11 @@ export class TypedClient { eTags.push({ part: partNumber, etag }) } + if (eTags.length === 0) { + await this.abortMultipartUpload(bucketName, objectName, uploadId) + return await this.uploadBuffer(bucketName, objectName, headers, Buffer.from('')) + } + return await this.completeMultipartUpload(bucketName, objectName, uploadId, eTags) })(), ])