diff --git a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/MimeTypeDetector.java b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/MimeTypeDetector.java index 52b341fec8e..9e16ec21a51 100644 --- a/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/MimeTypeDetector.java +++ b/models/spring-ai-vertex-ai-gemini/src/main/java/org/springframework/ai/vertexai/gemini/MimeTypeDetector.java @@ -59,11 +59,11 @@ public abstract class MimeTypeDetector { static final Map GEMINI_MIME_TYPES = new HashMap<>(); public static MimeType getMimeType(URL url) { - return getMimeType(url.getFile()); + return getMimeType(url.getPath()); } public static MimeType getMimeType(URI uri) { - return getMimeType(uri.toString()); + return getMimeType(uri.getPath()); } public static MimeType getMimeType(File file) { diff --git a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/MimeTypeDetectorTests.java b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/MimeTypeDetectorTests.java index c653df65f35..fa3012c9abd 100644 --- a/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/MimeTypeDetectorTests.java +++ b/models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/MimeTypeDetectorTests.java @@ -22,6 +22,7 @@ import java.nio.file.Path; import java.util.stream.Stream; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -30,6 +31,7 @@ import org.springframework.util.MimeType; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; /** * @author YunKui Lu @@ -90,4 +92,27 @@ void getMimeTypeByString(String extension, MimeType expectedMimeType) { assertThat(mimeType).isEqualTo(expectedMimeType); } + @Test + void getMimeTypeWithEmptyString() { + assertThatThrownBy(() -> MimeTypeDetector.getMimeType("")).isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Unable to detect the MIME type"); + } + + @Test + void getMimeTypeWithMultipleDots() { + // Should use the last extension + MimeType expectedPng = MimeTypeDetector.GEMINI_MIME_TYPES.get("png"); + assertThat(MimeTypeDetector.getMimeType("test.backup.png")).isEqualTo(expectedPng); + assertThat(MimeTypeDetector.getMimeType(new File("archive.tar.gz.png"))).isEqualTo(expectedPng); + } + + @Test + void getMimeTypeWithQueryParameters() throws MalformedURLException { + MimeType expectedJpg = MimeTypeDetector.GEMINI_MIME_TYPES.get("jpg"); + URI uri = URI.create("https://example.com/image.jpg?version=1.2&cache=false"); + + assertThat(MimeTypeDetector.getMimeType(uri)).isEqualTo(expectedJpg); + assertThat(MimeTypeDetector.getMimeType(uri.toURL())).isEqualTo(expectedJpg); + } + }