From c0a769719841551fe4c1d4f6d8b9e3e17260b979 Mon Sep 17 00:00:00 2001 From: Guillaume Rosauro Date: Fri, 29 Apr 2022 11:36:59 +0200 Subject: [PATCH] Exclude Slash from Encode, when calling getURL() --- .../io/awspring/cloud/core/io/s3/SimpleStorageResource.java | 6 +++++- .../cloud/core/io/s3/SimpleStorageResourceTest.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-cloud-aws-core/src/main/java/io/awspring/cloud/core/io/s3/SimpleStorageResource.java b/spring-cloud-aws-core/src/main/java/io/awspring/cloud/core/io/s3/SimpleStorageResource.java index 4730b8b76..ae12bd2bb 100644 --- a/spring-cloud-aws-core/src/main/java/io/awspring/cloud/core/io/s3/SimpleStorageResource.java +++ b/spring-cloud-aws-core/src/main/java/io/awspring/cloud/core/io/s3/SimpleStorageResource.java @@ -144,7 +144,11 @@ 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()); + List splits = new ArrayList<>(); + for (String split : this.objectName.split("/")) { + 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); } diff --git a/spring-cloud-aws-core/src/test/java/io/awspring/cloud/core/io/s3/SimpleStorageResourceTest.java b/spring-cloud-aws-core/src/test/java/io/awspring/cloud/core/io/s3/SimpleStorageResourceTest.java index 4abb1ceda..6eeeeeb5f 100644 --- a/spring-cloud-aws-core/src/test/java/io/awspring/cloud/core/io/s3/SimpleStorageResourceTest.java +++ b/spring-cloud-aws-core/src/test/java/io/awspring/cloud/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")); } }