diff --git a/packages/middleware-flexible-checksums/src/flexibleChecksumsMiddleware.ts b/packages/middleware-flexible-checksums/src/flexibleChecksumsMiddleware.ts index 498b2978b09f..14a21ad69f12 100644 --- a/packages/middleware-flexible-checksums/src/flexibleChecksumsMiddleware.ts +++ b/packages/middleware-flexible-checksums/src/flexibleChecksumsMiddleware.ts @@ -157,14 +157,29 @@ export const flexibleChecksumsMiddleware = } } - const result = await next({ - ...args, - request: { - ...request, - headers: updatedHeaders, - body: updatedBody, - }, - }); + try { + const result = await next({ + ...args, + request: { + ...request, + headers: updatedHeaders, + body: updatedBody, + }, + }); - return result; + return result; + } catch (e: unknown) { + if (e instanceof Error && e.name === "InvalidChunkSizeError") { + try { + if (!e.message.endsWith(".")) { + e.message += "."; + } + e.message += + " Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream."; + } catch (ignored) { + // e.g. message property unwritable. + } + } + throw e; + } }; diff --git a/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.e2e.spec.ts b/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.e2e.spec.ts index e5b9b4e814fc..9e52d72e225a 100644 --- a/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.e2e.spec.ts +++ b/packages/middleware-flexible-checksums/src/middleware-flexible-checksums.e2e.spec.ts @@ -102,7 +102,8 @@ describe("S3 checksums", () => { }) .catch((e) => { expect(String(e)).toContain( - "InvalidChunkSizeError: Only the last chunk is allowed to have a size less than 8192 bytes" + "InvalidChunkSizeError: Only the last chunk is allowed to have a size less than 8192 bytes. " + + "Set [requestStreamBufferSize=number e.g. 65_536] in client constructor to instruct AWS SDK to buffer your input stream." ); }); expect.hasAssertions();