From f8b4be3b8276dc6b0845c38e4d86e40d90d7b933 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 15 Nov 2022 12:50:15 +0100 Subject: [PATCH] Straight filename extraction for URI path (decoded and standard separators) See gh-29486 --- .../org/springframework/core/io/UrlResource.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/io/UrlResource.java b/spring-core/src/main/java/org/springframework/core/io/UrlResource.java index f5973a5ba23..ddda76455c4 100644 --- a/spring-core/src/main/java/org/springframework/core/io/UrlResource.java +++ b/spring-core/src/main/java/org/springframework/core/io/UrlResource.java @@ -101,9 +101,10 @@ public class UrlResource extends AbstractFileResolvingResource { // Equivalent without java.net.URL constructor - for building on JDK 20+ /* try { - this.uri = ResourceUtils.toURI(StringUtils.cleanPath(path)); + String cleanedPath = StringUtils.cleanPath(path); + this.uri = ResourceUtils.toURI(cleanedPath); this.url = this.uri.toURL(); - this.cleanedUrl = StringUtils.cleanPath(path); + this.cleanedUrl = cleanedPath; } catch (URISyntaxException | IllegalArgumentException ex) { MalformedURLException exToThrow = new MalformedURLException(ex.getMessage()); @@ -319,9 +320,14 @@ public class UrlResource extends AbstractFileResolvingResource { @Override @Nullable public String getFilename() { - String originalPath = (this.uri != null ? this.uri.getPath() : this.url.getPath()); - String filename = StringUtils.getFilename(StringUtils.cleanPath(originalPath)); - return (filename != null ? URLDecoder.decode(filename, StandardCharsets.UTF_8) : null); + if (this.uri != null) { + // URI path is decoded and has standard separators + return StringUtils.getFilename(this.uri.getPath()); + } + else { + String filename = StringUtils.getFilename(StringUtils.cleanPath(this.url.getPath())); + return (filename != null ? URLDecoder.decode(filename, StandardCharsets.UTF_8) : null); + } } /**