Skip to content

Commit 22c961d

Browse files
willomeGuillaume Rosauro
and
Guillaume Rosauro
authored
Exclude slash from encoding, when calling getURL() on S3 Resource (#353)
Co-authored-by: Guillaume Rosauro <[email protected]>
1 parent e362bf6 commit 22c961d

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

spring-cloud-aws-s3-parent/spring-cloud-aws-s3/src/main/java/io/awspring/cloud/s3/S3Resource.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import java.net.URLEncoder;
2424
import java.nio.charset.StandardCharsets;
2525
import java.time.Instant;
26+
import java.util.ArrayList;
27+
import java.util.List;
28+
2629
import org.springframework.core.io.AbstractResource;
2730
import org.springframework.core.io.WritableResource;
2831
import org.springframework.lang.Nullable;
@@ -76,7 +79,11 @@ public S3Resource(Location location, S3Client s3Client, S3OutputStreamProvider s
7679

7780
@Override
7881
public URL getURL() throws IOException {
79-
String encodedObjectName = URLEncoder.encode(location.getObject(), StandardCharsets.UTF_8.toString());
82+
List<String> splits = new ArrayList<>();
83+
for (String split : location.getObject().split("/")) {
84+
splits.add(URLEncoder.encode(split, StandardCharsets.UTF_8.toString()));
85+
}
86+
String encodedObjectName = String.join("/", splits);
8087
return new URL("https", location.getBucket() + ".s3.amazonaws.com", "/" + encodedObjectName);
8188
}
8289

spring-cloud-aws-s3-parent/spring-cloud-aws-s3/src/test/java/io/awspring/cloud/s3/S3ResourceIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,9 @@ void returnsResourceUrl() throws IOException {
129129
void returnsEncodedResourceUrlAndUri() throws IOException, URISyntaxException {
130130
S3Resource resource = s3Resource("s3://first-bucket/some/[objectName]");
131131
assertThat(resource.getURL().toString())
132-
.isEqualTo("https://first-bucket.s3.amazonaws.com/some%2F%5BobjectName%5D");
132+
.isEqualTo("https://first-bucket.s3.amazonaws.com/some/%5BobjectName%5D");
133133
assertThat(resource.getURI())
134-
.isEqualTo(new URI("https://first-bucket.s3.amazonaws.com/some%2F%5BobjectName%5D"));
134+
.isEqualTo(new URI("https://first-bucket.s3.amazonaws.com/some/%5BobjectName%5D"));
135135
}
136136

137137
@Test

0 commit comments

Comments
 (0)