From c002e46c127aac957b007039630136aeebeaec33 Mon Sep 17 00:00:00 2001 From: "Frederick F. Kautz IV" Date: Wed, 15 Jul 2015 04:52:28 +0000 Subject: [PATCH] Multipart Put now supports urlencoded keys --- Minio.Client/ObjectStorageClient.cs | 8 ++-- Minio.Client/V4Authenticator.cs | 2 - Minio.ClientTests/IntegrationTest.cs | 68 +++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/Minio.Client/ObjectStorageClient.cs b/Minio.Client/ObjectStorageClient.cs index 1a4df048..8ff03c02 100644 --- a/Minio.Client/ObjectStorageClient.cs +++ b/Minio.Client/ObjectStorageClient.cs @@ -816,11 +816,11 @@ namespace Minio.Client var queries = new List(); if (!recursive) { - queries.Add("delimiter=/"); + queries.Add("delimiter=%2F"); } if (prefix != null) { - queries.Add("prefix=" + prefix); + queries.Add("prefix=" + Uri.EscapeDataString(prefix)); } if (marker != null) { @@ -874,11 +874,11 @@ namespace Minio.Client queries.Add("uploads"); if (prefix != null) { - queries.Add("prefix=" + UrlEncode(prefix)); + queries.Add("prefix=" + Uri.EscapeDataString(prefix)); } if (keyMarker != null) { - queries.Add("key-marker=" + UrlEncode(keyMarker)); + queries.Add("key-marker=" + Uri.EscapeDataString(keyMarker)); } if (uploadIdMarker != null) { diff --git a/Minio.Client/V4Authenticator.cs b/Minio.Client/V4Authenticator.cs index 8b4c3316..ad437e65 100644 --- a/Minio.Client/V4Authenticator.cs +++ b/Minio.Client/V4Authenticator.cs @@ -190,8 +190,6 @@ namespace Minio.Client if (individualParameterString.Contains('=')) { string[] splitQuery = individualParameterString.Split(new char[] { '=' }, 2); - splitQuery[0] = WebUtility.UrlEncode(splitQuery[0]); - splitQuery[1] = WebUtility.UrlEncode(splitQuery[1]); sortedQueries.Add(splitQuery[0] + "=" + splitQuery[1]); } else diff --git a/Minio.ClientTests/IntegrationTest.cs b/Minio.ClientTests/IntegrationTest.cs index 561d1a3e..e72e5a2f 100644 --- a/Minio.ClientTests/IntegrationTest.cs +++ b/Minio.ClientTests/IntegrationTest.cs @@ -437,7 +437,73 @@ namespace Minio.ClientTests { data[i] = (byte)'a'; } - client.PutObject(bucket, "largeobj", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); + client.PutObject(bucket, "large/object", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); + } + + [TestMethod] + public void PutLargeObjectWithContentType() + { + byte[] data = new byte[11 * 1024 * 1024]; + for (int i = 0; i < 11 * 1024 * 1024; i++) + { + data[i] = (byte)'a'; + } + client.PutObject(bucket, "large/text_plain", 11 * 1024 * 1024, "text/plain", new MemoryStream(data)); + } + + [TestMethod] + public void PutLargeObjectWithQuestionMark() + { + byte[] data = new byte[11 * 1024 * 1024]; + for (int i = 0; i < 11 * 1024 * 1024; i++) + { + data[i] = (byte)'a'; + } + client.PutObject(bucket, "large/obj?ect", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); + } + + [TestMethod] + public void PutLargeObjectWithHash() + { + byte[] data = new byte[11 * 1024 * 1024]; + for (int i = 0; i < 11 * 1024 * 1024; i++) + { + data[i] = (byte)'a'; + } + client.PutObject(bucket, "large/obj#ect", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); + } + + [TestMethod] + public void PutLargeObjectWithUnicode1() + { + byte[] data = new byte[11 * 1024 * 1024]; + for (int i = 0; i < 11 * 1024 * 1024; i++) + { + data[i] = (byte)'a'; + } + client.PutObject(bucket, "large/世界", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); + } + + [TestMethod] + public void PutLargeObjectWithUnicode2() + { + byte[] data = new byte[11 * 1024 * 1024]; + for (int i = 0; i < 11 * 1024 * 1024; i++) + { + data[i] = (byte)'a'; + } + client.PutObject(bucket, "large/世界世", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); + } + + [TestMethod] + public void PutLargeObjectWithUnicode3() + { + byte[] data = new byte[11 * 1024 * 1024]; + for (int i = 0; i < 11 * 1024 * 1024; i++) + { + data[i] = (byte)'a'; + } + client.PutObject(bucket, "large/世界世界", 11 * 1024 * 1024, "application/octet-stream", new MemoryStream(data)); } [TestMethod]