From ffc3087bf348a3c93e9ca609b86849ac35d8104c Mon Sep 17 00:00:00 2001 From: songintae Date: Sun, 16 Jan 2022 17:26:42 +0900 Subject: [PATCH 1/3] Exclude Slash from Encode, when calling getURL() --- .../cloud/aws/core/io/s3/SimpleStorageResource.java | 9 ++++++--- .../cloud/aws/core/io/s3/SimpleStorageResourceTest.java | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java b/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java index 08416daca..d8921541e 100644 --- a/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java +++ b/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java @@ -144,9 +144,12 @@ public String getFilename() throws IllegalStateException { @Override public URL getURL() throws IOException { Region region = this.amazonS3.getRegion().toAWSRegion(); - String encodedObjectName = URLEncoder.encode(this.objectName, StandardCharsets.UTF_8.toString()); - return new URL("https", region.getServiceEndpoint(AmazonS3Client.S3_SERVICE_NAME), - "/" + this.bucketName + "/" + encodedObjectName); + List splits = new ArrayList<>(); + for (String split : this.objectName.split("/")) { + splits.add(URLEncoder.encode(split, StandardCharsets.UTF_8.toString())); + } + String encodedObjectName = splits.stream().collect(Collectors.joining("/")); + return new URL("https", region.getServiceEndpoint(AmazonS3Client.S3_SERVICE_NAME), "/" + this.bucketName + "/" + encodedObjectName); } public URI getS3Uri() { diff --git a/spring-cloud-aws-core/src/test/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResourceTest.java b/spring-cloud-aws-core/src/test/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResourceTest.java index a828ce5b1..4ad850de1 100644 --- a/spring-cloud-aws-core/src/test/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResourceTest.java +++ b/spring-cloud-aws-core/src/test/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResourceTest.java @@ -348,7 +348,7 @@ void getUri_encodes_objectName() throws Exception { new SyncTaskExecutor()); assertThat(resource.getURI()) - .isEqualTo(new URI("https://s3.us-west-2.amazonaws.com/bucketName/some%2F%5BobjectName%5D")); + .isEqualTo(new URI("https://s3.us-west-2.amazonaws.com/bucketName/some/%5BobjectName%5D")); } } From edb5e935af85015cf0433b97c3d2ce01ffa7a9d5 Mon Sep 17 00:00:00 2001 From: songintae Date: Sun, 16 Jan 2022 17:45:54 +0900 Subject: [PATCH 2/3] Change Stream.Joining to String.join --- .../cloud/aws/core/io/s3/SimpleStorageResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java b/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java index d8921541e..3130419b9 100644 --- a/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java +++ b/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java @@ -148,7 +148,7 @@ public URL getURL() throws IOException { for (String split : this.objectName.split("/")) { splits.add(URLEncoder.encode(split, StandardCharsets.UTF_8.toString())); } - String encodedObjectName = splits.stream().collect(Collectors.joining("/")); + String encodedObjectName = String.join("/", splits); return new URL("https", region.getServiceEndpoint(AmazonS3Client.S3_SERVICE_NAME), "/" + this.bucketName + "/" + encodedObjectName); } From d049378f156b653665a81054d7d874ecf3df99e4 Mon Sep 17 00:00:00 2001 From: songintae Date: Sun, 16 Jan 2022 18:52:09 +0900 Subject: [PATCH 3/3] Reformat Code --- .../cloud/aws/core/io/s3/SimpleStorageResource.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java b/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java index 3130419b9..148d5ce84 100644 --- a/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java +++ b/spring-cloud-aws-core/src/main/java/org/springframework/cloud/aws/core/io/s3/SimpleStorageResource.java @@ -149,7 +149,8 @@ public URL getURL() throws IOException { splits.add(URLEncoder.encode(split, StandardCharsets.UTF_8.toString())); } String encodedObjectName = String.join("/", splits); - return new URL("https", region.getServiceEndpoint(AmazonS3Client.S3_SERVICE_NAME), "/" + this.bucketName + "/" + encodedObjectName); + return new URL("https", region.getServiceEndpoint(AmazonS3Client.S3_SERVICE_NAME), + "/" + this.bucketName + "/" + encodedObjectName); } public URI getS3Uri() {