From 6528d9b1e164eab939f328f79c89e8375b61b147 Mon Sep 17 00:00:00 2001 From: emrocha <38505425+emrocha@users.noreply.github.com> Date: Fri, 19 May 2023 18:15:22 -0300 Subject: [PATCH] PutObjectAsync with Snowball header must not use multipart PutObjectAsync must not use multipart if has header "X-Amz-Meta-Snowball-Auto-Extract=true" See https://github.com/minio/minio/issues/17033 --- Minio/ApiEndpoints/ObjectOperations.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Minio/ApiEndpoints/ObjectOperations.cs b/Minio/ApiEndpoints/ObjectOperations.cs index abfe8d0f7..4a8246929 100644 --- a/Minio/ApiEndpoints/ObjectOperations.cs +++ b/Minio/ApiEndpoints/ObjectOperations.cs @@ -561,8 +561,12 @@ public async Task PutObjectAsync(PutObjectArgs args, args?.Validate(); args.SSE?.Marshal(args.Headers); - // Upload object in single part if size falls under restricted part size. - if (args.ObjectSize < Constants.MinimumPartSize && args.ObjectSize >= 0 && args.ObjectStreamData is not null) + var isSnowball = args.Headers.ContainsKey("X-Amz-Meta-Snowball-Auto-Extract") && + Convert.ToBoolean(args.Headers["X-Amz-Meta-Snowball-Auto-Extract"]); + + // Upload object in single part if size falls under restricted part size + // or the request has snowball objects + if ((args.ObjectSize < Constants.MinimumPartSize || isSnowball) && args.ObjectSize >= 0 && args.ObjectStreamData is not null) { var bytes = await ReadFullAsync(args.ObjectStreamData, (int)args.ObjectSize).ConfigureAwait(false); var bytesRead = bytes.Length; @@ -1395,4 +1399,4 @@ private async Task MultipartCopyUploadAsync(string bucketName, string objectName await CompleteMultipartUploadAsync(destBucketName, destObjectName, uploadId, etags, cancellationToken).ConfigureAwait(false); } -} \ No newline at end of file +}