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 +}