Repository: minio/minio (language: go)

Issue:
Cannot set Content-Type with PutObjectsSnowball(...)
I use `PutObjectsSnowball()` to upload multiple files but cannot set Content-Type. My code looks like this:
```
s.client.PutObjectsSnowball(
		ctx,
		options.Bucket,
		minio.SnowballOptions{
			Opts: minio.PutObjectOptions{ContentType: "image/jpeg"},
		},
		objCh,
	)
```

This code does not work despite I set right CT in options. Minio console shows my files are `Content-Type
application/octet-stream`.

Here is a debugger screenshot:
![image](https://user-images.githubusercontent.com/38575605/232403924-4fb8a286-5c4e-46b0-b1e2-56a57db81245.png)
I followed execution trace up to http.Do() and options are passed correctly all the way so I think the problem is on server side. 


Discussion / hints:

Fix patch:
diff --git a/cmd/object-handlers.go b/cmd/object-handlers.go
index def1209548375..6b9e6ab209c02 100644
--- a/cmd/object-handlers.go
+++ b/cmd/object-handlers.go
@@ -2084,11 +2084,24 @@ func (api objectAPIHandlers) PutObjectExtractHandler(w http.ResponseWriter, r *h
 		getObjectInfo = api.CacheAPI().GetObjectInfo
 	}
 
+	// Extract request metadata
+	metadata, err := extractMetadata(ctx, r)
+	if err != nil {
+		writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
+		return
+	}
+	metadata[xhttp.AmzStorageClass] = sc
+
 	putObjectTar := func(reader io.Reader, info os.FileInfo, object string) error {
 		size := info.Size()
-		metadata := map[string]string{
-			xhttp.AmzStorageClass: sc,
+
+		// Copy metadata and make space for a bit more
+		metaCopy := make(map[string]string, len(metadata)+5)
+		for k, v := range metadata {
+			metaCopy[k] = v
 		}
+		// Shadow now...
+		metadata := metaCopy
 
 		actualSize := size
 		var idxCb func() []byte


Test patch: