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);