From f604e6496617c423b04c68472e7943665881d91a Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Thu, 25 Jan 2024 21:36:15 +0100 Subject: [PATCH] fix: mimetype to extension convert --- pom.xml | 6 ++-- src/main/docker/Dockerfile.native | 1 + .../titionfire/ffsaf/rest/CombEndpoints.java | 35 ++++++++++++------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index bb6cffd..169f384 100644 --- a/pom.xml +++ b/pom.xml @@ -89,9 +89,9 @@ - org.apache.tika - tika-core - 3.0.0-BETA + org.jodd + jodd-util + 6.2.1 diff --git a/src/main/docker/Dockerfile.native b/src/main/docker/Dockerfile.native index eae266f..f30745c 100644 --- a/src/main/docker/Dockerfile.native +++ b/src/main/docker/Dockerfile.native @@ -21,6 +21,7 @@ RUN chown 1001 /work \ && chown 1001:root /work COPY --chown=1001:root ffsaf/target/*-runner /work/application COPY --chown=1001:root ffsaf/src/main/resources/cacerts /work/cacerts +RUN mkdir /work/media && chown -R 1001:root /work/media EXPOSE 8080 USER 1001 diff --git a/src/main/java/fr/titionfire/ffsaf/rest/CombEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/CombEndpoints.java index a8e744f..3030d1f 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/CombEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/CombEndpoints.java @@ -12,17 +12,13 @@ import jakarta.ws.rs.*; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import org.apache.commons.io.FileUtils; -import org.apache.tika.Tika; -import org.apache.tika.mime.MimeTypeException; -import org.apache.tika.mime.MimeTypes; +import jodd.net.MimeTypes; import org.eclipse.microprofile.config.inject.ConfigProperty; -import java.io.File; -import java.io.FilenameFilter; -import java.io.IOException; +import java.io.*; import java.net.URI; import java.net.URISyntaxException; +import java.net.URLConnection; import java.nio.file.Files; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -60,12 +56,25 @@ public class CombEndpoints { @Consumes(MediaType.MULTIPART_FORM_DATA) public Uni setAdminMembre(@PathParam("id") long id, FullMemberForm input) { Future future = CompletableFuture.supplyAsync(() -> { - try{ - String mimeType = new Tika().detect(input.getPhoto_data()); - String extension = MimeTypes.getDefaultMimeTypes().forName(mimeType).getExtension(); - FileUtils.writeByteArrayToFile(new File(media, "ppMembre/" + input.getId() + extension), input.getPhoto_data()); + try (InputStream is = new BufferedInputStream(new ByteArrayInputStream(input.getPhoto_data()))) { + String mimeType = URLConnection.guessContentTypeFromStream(is); + String[] detectedExtensions = MimeTypes.findExtensionsByMimeTypes(mimeType, false); + if (detectedExtensions.length == 0) + throw new IOException("Fail to detect file extension for MIME type " + mimeType); + + FilenameFilter filter = (directory, filename) -> filename.startsWith(String.valueOf(id)); + File[] files = new File(media, "ppMembre").listFiles(filter); + if (files != null) { + for (File file : files) { + //noinspection ResultOfMethodCallIgnored + file.delete(); + } + } + + String extension = "." + detectedExtensions[0]; + Files.write(new File(media, "ppMembre/" + input.getId() + extension).toPath(), input.getPhoto_data()); return "OK"; - } catch (IOException | MimeTypeException e) { + } catch (IOException e) { return e.getMessage(); } }); @@ -112,7 +121,7 @@ public class CombEndpoints { if (filePair == null) return Response.temporaryRedirect(uri).build(); - String mimeType = new Tika().detect(filePair.getKey().getName()); + String mimeType = URLConnection.guessContentTypeFromName(filePair.getKey().getName()); Response.ResponseBuilder resp = Response.ok(filePair.getValue()); resp.type(MediaType.APPLICATION_OCTET_STREAM);