diff --git a/jams-react-client/src/components/CustomImgDropZone/CustomImgDropZone.tsx b/jams-react-client/src/components/CustomImgDropZone/CustomImgDropZone.tsx
index f29c525b52b96e7c0b12eadb93c1bcd80fcd7a20..27fe93da0c6338836693b86e6981cdd1ca285d0e 100644
--- a/jams-react-client/src/components/CustomImgDropZone/CustomImgDropZone.tsx
+++ b/jams-react-client/src/components/CustomImgDropZone/CustomImgDropZone.tsx
@@ -1,6 +1,6 @@
-import React from "react";
+import React, { FC, MouseEventHandler } from "react";
 import { makeStyles } from "@mui/styles";
-import Dropzone from "react-dropzone";
+import Dropzone, { Accept } from "react-dropzone";
 import UploadIcon from "@mui/icons-material/CloudUpload";
 import CloseIcon from "@mui/icons-material/Close";
 
@@ -32,12 +32,27 @@ const useStyles = makeStyles({
   },
 });
 
-function CustomImgDropZone(props) {
-  const { onDrop, accept, maxFiles, label, file, handleDelete, ...rest } =
-    props;
+interface CustomImgDropZoneProps {
+  onDrop: (acceptedFiles: File[]) => void;
+  accept?: Accept;
+  maxFiles?: number;
+  label: string;
+  file: string;
+  handleDelete: MouseEventHandler<HTMLButtonElement>;
+}
+
+const CustomImgDropZone: FC<CustomImgDropZoneProps> = ({
+  onDrop,
+  accept,
+  maxFiles,
+  label,
+  file,
+  handleDelete,
+  ...rest
+}) => {
   const classes = useStyles();
 
-  const handleDrop = (acceptedFiles) => {
+  const handleDrop = (acceptedFiles: File[]) => {
     if (acceptedFiles.length > 0) {
       onDrop(acceptedFiles);
     }
@@ -63,7 +78,7 @@ function CustomImgDropZone(props) {
       )}
     </Dropzone>
   );
-}
+};
 
 CustomImgDropZone.defaultProps = {
   accept: { "image/*": [".png", ".jpeg", ".jpg", ".svg"] },
diff --git a/jams-react-client/src/views/Blueprint/EditBlueprintUi.tsx b/jams-react-client/src/views/Blueprint/EditBlueprintUi.tsx
index 1d62ef66cc1057f13b2bc3d9e12f3ac6cf2d0787..224adc197f10ac1be2f8eee2eb63aab9d7d6ecc9 100644
--- a/jams-react-client/src/views/Blueprint/EditBlueprintUi.tsx
+++ b/jams-react-client/src/views/Blueprint/EditBlueprintUi.tsx
@@ -14,12 +14,7 @@ import GridContainer from "components/Grid/GridContainer";
 
 import { hexToRgb, blackColor } from "assets/jss/material-dashboard-react";
 
-import {
-  api_path_get_image,
-  api_path_post_image,
-  url_path,
-  url_port,
-} from "../../globalUrls";
+import { api_path_post_image, url_path, url_port } from "../../globalUrls";
 
 import dashboardStyle from "assets/jss/material-dashboard-react/views/dashboardStyle";
 
@@ -146,7 +141,7 @@ export default function EditBlueprintUi({ blueprintName }) {
     updatePolicyData("uiCustomization", newUiCustomization);
   };
 
-  const handleImgDrop = (acceptedFiles: string[], imgType: string) => {
+  const handleImgDrop = (acceptedFiles: any[], imgType: string) => {
     const formData = new FormData();
     formData.append("file", acceptedFiles[0]);
 
@@ -156,8 +151,9 @@ export default function EditBlueprintUi({ blueprintName }) {
       method: "POST",
       body: formData,
     })
-      .then(() => {
-        const newUrl = `${api_path_get_image}/${blueprintName}/${imgType}/${acceptedFiles[0].name}`;
+      .then((res) => res.json())
+      .then((res) => {
+        const newUrl = res.url;
 
         if (imgType === "background") {
           handleUpdateUi({
diff --git a/jams-react-client/src/views/Blueprint/EditBlueprintUiForm.tsx b/jams-react-client/src/views/Blueprint/EditBlueprintUiForm.tsx
index 524a7db5bc73bb21bad5c05f60913c79d6eb827a..457bcce39cdad7967799fe4e3a9fa396a607a9db 100644
--- a/jams-react-client/src/views/Blueprint/EditBlueprintUiForm.tsx
+++ b/jams-react-client/src/views/Blueprint/EditBlueprintUiForm.tsx
@@ -182,10 +182,6 @@ const CustomBackgroundForm = ({
   handleImgDrop,
   bgFile,
 }) => {
-  const setBgFile = (value) => {
-    handleUpdateUi("bgFile", value);
-  };
-
   return (
     <>
       <span>
@@ -225,7 +221,6 @@ const CustomBackgroundForm = ({
               .t("upload_an_image", "Upload an image")
               .toUpperCase()}
             file={bgFile}
-            setFile={setBgFile}
             handleDelete={(e) => {
               handleUpdateUi("backgroundUrl", "");
               e.preventDefault();
@@ -316,10 +311,6 @@ const LogoForm = ({
   handleUpdateUi,
   logoFile,
 }) => {
-  const setLogoFile = (value) => {
-    handleUpdateUi("logoFile", value);
-  };
-
   return (
     <>
       <span>
@@ -336,7 +327,6 @@ const LogoForm = ({
             .t("upload_a_logotype", "Upload a logotype")
             .toUpperCase()}
           file={logoFile}
-          setFile={setLogoFile}
           handleDelete={(e) => {
             handleDeleteLogo(e);
             handleUpdateUi("logoUrl", null);
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/image/FileHandlerServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/image/FileHandlerServlet.java
index 6ac7245f436a51f94bcb2412393f5d730904762e..b5358130560412b7ad54a73f796b87ab17717aa7 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/image/FileHandlerServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/image/FileHandlerServlet.java
@@ -9,6 +9,7 @@ import jakarta.servlet.http.HttpServletResponse;
 import jakarta.servlet.http.Part;
 
 import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.common.serialization.adapters.GsonFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -16,6 +17,10 @@ import java.io.OutputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gson.Gson;
 
 @MultipartConfig
 @Slf4j
@@ -23,18 +28,7 @@ import java.nio.file.Paths;
 public class FileHandlerServlet extends HttpServlet {
 
     private static final String IMAGES_DIR = "images";
-    private static final String SAVE_DIR =
-            ".."
-                    + File.separator
-                    + ".."
-                    + File.separator
-                    + ".."
-                    + File.separator
-                    + ".."
-                    + File.separator
-                    + ".."
-                    + File.separator
-                    + IMAGES_DIR;
+    private static final String SAVE_DIR = "../../../../../" + IMAGES_DIR;
 
     /**
      * @apiVersion 1.0.0
@@ -76,44 +70,29 @@ public class FileHandlerServlet extends HttpServlet {
 
             File imagesFolder = new File(IMAGES_DIR + File.separator + blueprintName);
             if (!imagesFolder.exists()) {
-
                 imagesFolder.mkdirs();
-
-                File imagesFolderLogo =
-                        new File(
-                                IMAGES_DIR
-                                        + File.separator
-                                        + blueprintName
-                                        + File.separator
-                                        + "logo");
-                File imagesFolderBackground =
-                        new File(
-                                IMAGES_DIR
-                                        + File.separator
-                                        + blueprintName
-                                        + File.separator
-                                        + "background");
-
-                imagesFolderLogo.mkdirs();
-                imagesFolderBackground.mkdirs();
+                Paths.get(IMAGES_DIR, blueprintName, "logo").toFile().mkdirs();
+                Paths.get(IMAGES_DIR, blueprintName, "background").toFile().mkdirs();
             }
 
             Part filePart = request.getPart("file"); // Retrieves <input type="file" name="file">
             String fileName = filePart.getSubmittedFileName();
+            String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
 
             for (Part part : request.getParts()) {
-                part.write(
-                        SAVE_DIR
-                                + File.separator
-                                + blueprintName
-                                + File.separator
-                                + imageType
-                                + File.separator
-                                + fileName);
+                long now = System.currentTimeMillis();
+                fileName = now + "." + ext;
+                Path path = Paths.get(SAVE_DIR, blueprintName, imageType, fileName);
+                part.write(path.toString());
             }
 
+            Map<String, String> map = new HashMap<>();
+            String url = "/api/image/filehandler/" + blueprintName + "/" + imageType + "/" + fileName;
+            map.put("url", url);
+
+            Gson gson = GsonFactory.createGson();
             response.setStatus(HttpServletResponse.SC_OK);
-            response.getWriter().write("File upload was successful.");
+            response.getWriter().write(gson.toJson(map));
         } catch (Exception e) {
             log.error("Error during file upload: " + e.getMessage());
             response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -174,6 +153,7 @@ public class FileHandlerServlet extends HttpServlet {
             }
 
             response.setContentType(mimeType);
+            response.setHeader("Cache-Control", "public, max-age=31536000");
 
             try (OutputStream out = response.getOutputStream()) {
                 out.write(imageData);