From c8b7654bcfe343ed3cd937c9eff28e70624eff67 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:36:52 +0000 Subject: [PATCH] fix(server): disable automatic checksums in S3 presigned URLs for large file uploads Co-authored-by: danielalves96 <62755605+danielalves96@users.noreply.github.com> --- apps/server/src/providers/s3-storage.provider.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/server/src/providers/s3-storage.provider.ts b/apps/server/src/providers/s3-storage.provider.ts index becb66d..fb82b8a 100644 --- a/apps/server/src/providers/s3-storage.provider.ts +++ b/apps/server/src/providers/s3-storage.provider.ts @@ -80,7 +80,21 @@ export class S3StorageProvider implements StorageProvider { Key: objectName, }); - return await getSignedUrl(s3Client, command, { expiresIn: expires }); + // Disable automatic checksum calculation for large file uploads + // This prevents the SDK from adding x-amz-checksum-* headers that may cause + // 400 Bad Request errors with S3-compatible providers like Wasabi for files > 10GB + // The unhoistableHeaders option prevents specific headers from being included in the presigned URL + return await getSignedUrl(s3Client, command, { + expiresIn: expires, + unhoistableHeaders: new Set([ + "x-amz-checksum-crc32", + "x-amz-checksum-crc32c", + "x-amz-checksum-sha1", + "x-amz-checksum-sha256", + "x-amz-checksum-crc64nvme", + "x-amz-sdk-checksum-algorithm", + ]), + }); } async getPresignedGetUrl(objectName: string, expires: number, fileName?: string): Promise {