diff --git a/compilation.md b/compilation.md
index d8793aa08373aa217d970999e69be7adc10f7687..ed1bf26d20b435da9ae80c9eed39cd9ea782f165 100644
--- a/compilation.md
+++ b/compilation.md
@@ -1 +1 @@
-javac -d WEB-INF/classes -cp ../../lib/servlet-api.jar:../../lib/commons-lang3-3.17.0.jar:../../lib/commons-text-1.13.0.jar  WEB-INF/src/controleur/*.java WEB-INF/src/modele/*.java
\ No newline at end of file
+javac -d WEB-INF/classes -cp ../../lib/servlet-api.jar:../../lib/commons-lang3-3.17.0.jar:../../lib/commons-text-1.13.0.jar:../../lib/jackson-datatype-jsr310-2.13.0.jar:../../lib/jackson-annotations-2.15.3.jar:../../lib/jackson-core-2.15.3.jar:../../lib/jackson-databind-2.15.3.jar:../../lib/jackson-dataformat-xml-2.15.3.jar  WEB-INF/src/controleur/*.java WEB-INF/src/modele/*.java
diff --git a/lib/annotations-api.jar b/lib/annotations-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e303329a574d38d763cecc462489ca01abfa1ad6
Binary files /dev/null and b/lib/annotations-api.jar differ
diff --git a/lib/catalina-ant.jar b/lib/catalina-ant.jar
new file mode 100644
index 0000000000000000000000000000000000000000..76d7756c2db2c6099b9f662a0582fa5a71700f46
Binary files /dev/null and b/lib/catalina-ant.jar differ
diff --git a/lib/catalina-ha.jar b/lib/catalina-ha.jar
new file mode 100644
index 0000000000000000000000000000000000000000..20b638a5c1599b24e2ec1274ab3e2b21a439ab2d
Binary files /dev/null and b/lib/catalina-ha.jar differ
diff --git a/lib/catalina-ssi.jar b/lib/catalina-ssi.jar
new file mode 100644
index 0000000000000000000000000000000000000000..083ba8154b4b08958820e914ad7e76d201b33a2c
Binary files /dev/null and b/lib/catalina-ssi.jar differ
diff --git a/lib/catalina-storeconfig.jar b/lib/catalina-storeconfig.jar
new file mode 100644
index 0000000000000000000000000000000000000000..36551095a40f2996a2ed03dd1a18d38f5ea03f82
Binary files /dev/null and b/lib/catalina-storeconfig.jar differ
diff --git a/lib/catalina-tribes.jar b/lib/catalina-tribes.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6a3c5011ccf906b6c72db584a6827022292d2cee
Binary files /dev/null and b/lib/catalina-tribes.jar differ
diff --git a/lib/catalina.jar b/lib/catalina.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d3dfc66537b1c2d1b6560871097ff38a6e834514
Binary files /dev/null and b/lib/catalina.jar differ
diff --git a/lib/commons-lang3-3.17.0.jar b/lib/commons-lang3-3.17.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f6486b4d7039f22ccf160c8d24ebac26f05bf0de
Binary files /dev/null and b/lib/commons-lang3-3.17.0.jar differ
diff --git a/lib/commons-text-1.13.0.jar b/lib/commons-text-1.13.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a8231464949d5e7fb71a14e044767ad1bfa4c27d
Binary files /dev/null and b/lib/commons-text-1.13.0.jar differ
diff --git a/lib/ecj-4.27.jar b/lib/ecj-4.27.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a8f827f350d0e9a47af6ef8e262af3dcc7e0c5f6
Binary files /dev/null and b/lib/ecj-4.27.jar differ
diff --git a/lib/el-api.jar b/lib/el-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..915158f3e459724c4c0f63e409e98d17fb4252dd
Binary files /dev/null and b/lib/el-api.jar differ
diff --git a/lib/jackson-annotations-2.15.3.jar b/lib/jackson-annotations-2.15.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..83a6e4ddaacd47fa06e8e464d9c7af645b53ff23
Binary files /dev/null and b/lib/jackson-annotations-2.15.3.jar differ
diff --git a/lib/jackson-core-2.15.3.jar b/lib/jackson-core-2.15.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f0c53d16aa074ab1bc97346eb7d3502ac0ecc03f
Binary files /dev/null and b/lib/jackson-core-2.15.3.jar differ
diff --git a/lib/jackson-databind-2.15.3.jar b/lib/jackson-databind-2.15.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b1a891a3a152ad0323b5fcbcbfa046aa8bd36d9a
Binary files /dev/null and b/lib/jackson-databind-2.15.3.jar differ
diff --git a/lib/jackson-dataformat-xml-2.15.3.jar b/lib/jackson-dataformat-xml-2.15.3.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3335c21c73474ddb82564518b25c06120046985a
Binary files /dev/null and b/lib/jackson-dataformat-xml-2.15.3.jar differ
diff --git a/lib/jackson-datatype-jsr310-2.13.0.jar b/lib/jackson-datatype-jsr310-2.13.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..aabe23dc082d45f8f47890e6a07001690f806437
Binary files /dev/null and b/lib/jackson-datatype-jsr310-2.13.0.jar differ
diff --git a/lib/jakartaee-migration-1.0.9-shaded.jar b/lib/jakartaee-migration-1.0.9-shaded.jar
new file mode 100644
index 0000000000000000000000000000000000000000..83d8075c971bf35a73ae2aea9ebc07bddf97e9de
Binary files /dev/null and b/lib/jakartaee-migration-1.0.9-shaded.jar differ
diff --git a/lib/jasper-el.jar b/lib/jasper-el.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1f7d2759f92dc0867207385948859422ecc0876f
Binary files /dev/null and b/lib/jasper-el.jar differ
diff --git a/lib/jasper.jar b/lib/jasper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..16eb31f8fa5f700800288f8e77be01758667a177
Binary files /dev/null and b/lib/jasper.jar differ
diff --git a/lib/jaspic-api.jar b/lib/jaspic-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3c8d7ea22624fba0fd12a3f703f6c1a0467faac1
Binary files /dev/null and b/lib/jaspic-api.jar differ
diff --git a/lib/jsp-api.jar b/lib/jsp-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..b2e108d3f650b5adede5001fd07fce1cf0bd7c7f
Binary files /dev/null and b/lib/jsp-api.jar differ
diff --git a/lib/postgresql-42.7.5.jar b/lib/postgresql-42.7.5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..279942c19c49e7c3f28b07a0c11f99eef7041818
Binary files /dev/null and b/lib/postgresql-42.7.5.jar differ
diff --git a/lib/servlet-api.jar b/lib/servlet-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..90bb1bccbde89683d431df1c62e4be54e7b49277
Binary files /dev/null and b/lib/servlet-api.jar differ
diff --git a/lib/tomcat-api.jar b/lib/tomcat-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..900a9db0a869ec77a18787568ccc0aa4ac314dc6
Binary files /dev/null and b/lib/tomcat-api.jar differ
diff --git a/lib/tomcat-coyote-ffm.jar b/lib/tomcat-coyote-ffm.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f28dc1bf8972488600c39374b061ccecf661c7d4
Binary files /dev/null and b/lib/tomcat-coyote-ffm.jar differ
diff --git a/lib/tomcat-coyote.jar b/lib/tomcat-coyote.jar
new file mode 100644
index 0000000000000000000000000000000000000000..94094952696e7ab5a36e56011d5cf6f40eaaae07
Binary files /dev/null and b/lib/tomcat-coyote.jar differ
diff --git a/lib/tomcat-dbcp.jar b/lib/tomcat-dbcp.jar
new file mode 100644
index 0000000000000000000000000000000000000000..dc4dbb5aa6616e2a25797c1c4793b148c2fdea4f
Binary files /dev/null and b/lib/tomcat-dbcp.jar differ
diff --git a/lib/tomcat-i18n-cs.jar b/lib/tomcat-i18n-cs.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a0d7a181588e58307a4810626052e3b0ff26bc56
Binary files /dev/null and b/lib/tomcat-i18n-cs.jar differ
diff --git a/lib/tomcat-i18n-de.jar b/lib/tomcat-i18n-de.jar
new file mode 100644
index 0000000000000000000000000000000000000000..3ef9a694e86272dfe92b9a89014e989849305bb0
Binary files /dev/null and b/lib/tomcat-i18n-de.jar differ
diff --git a/lib/tomcat-i18n-es.jar b/lib/tomcat-i18n-es.jar
new file mode 100644
index 0000000000000000000000000000000000000000..55306da32a46ce1a7724b96b5f17ae4d81cb0f24
Binary files /dev/null and b/lib/tomcat-i18n-es.jar differ
diff --git a/lib/tomcat-i18n-fr.jar b/lib/tomcat-i18n-fr.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e7993ec98632fe97410a98377fca6a75a5c2e24a
Binary files /dev/null and b/lib/tomcat-i18n-fr.jar differ
diff --git a/lib/tomcat-i18n-ja.jar b/lib/tomcat-i18n-ja.jar
new file mode 100644
index 0000000000000000000000000000000000000000..94f5d1cc1b3f2903320081dee7aa5d23760bf5a2
Binary files /dev/null and b/lib/tomcat-i18n-ja.jar differ
diff --git a/lib/tomcat-i18n-ko.jar b/lib/tomcat-i18n-ko.jar
new file mode 100644
index 0000000000000000000000000000000000000000..75eb86e5fa88e9c785b502500bf34d0aa2cc6aac
Binary files /dev/null and b/lib/tomcat-i18n-ko.jar differ
diff --git a/lib/tomcat-i18n-pt-BR.jar b/lib/tomcat-i18n-pt-BR.jar
new file mode 100644
index 0000000000000000000000000000000000000000..43dea11ba943851f494c11ad147676882031d046
Binary files /dev/null and b/lib/tomcat-i18n-pt-BR.jar differ
diff --git a/lib/tomcat-i18n-ru.jar b/lib/tomcat-i18n-ru.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe5c3625baec5556574bca31cfe2fcf62f9239
Binary files /dev/null and b/lib/tomcat-i18n-ru.jar differ
diff --git a/lib/tomcat-i18n-zh-CN.jar b/lib/tomcat-i18n-zh-CN.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f20b2c50d9a55ef5dddfc5445f9d2fd864a6f715
Binary files /dev/null and b/lib/tomcat-i18n-zh-CN.jar differ
diff --git a/lib/tomcat-jdbc.jar b/lib/tomcat-jdbc.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e22934191bd86c4b82c44205d962cea0d1d66c21
Binary files /dev/null and b/lib/tomcat-jdbc.jar differ
diff --git a/lib/tomcat-jni.jar b/lib/tomcat-jni.jar
new file mode 100644
index 0000000000000000000000000000000000000000..a2a35318a27c182250bfb51207b9aabe7a4fa2af
Binary files /dev/null and b/lib/tomcat-jni.jar differ
diff --git a/lib/tomcat-util-scan.jar b/lib/tomcat-util-scan.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f28d0c310a3b314d55b16db62cbd004e8af6a825
Binary files /dev/null and b/lib/tomcat-util-scan.jar differ
diff --git a/lib/tomcat-util.jar b/lib/tomcat-util.jar
new file mode 100644
index 0000000000000000000000000000000000000000..ffcdea230cf5053cb0e90e1f4f22342d1d66f3e9
Binary files /dev/null and b/lib/tomcat-util.jar differ
diff --git a/lib/tomcat-websocket.jar b/lib/tomcat-websocket.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1371b33afdc2650919350b6a0bdf3f3154690522
Binary files /dev/null and b/lib/tomcat-websocket.jar differ
diff --git a/lib/websocket-api.jar b/lib/websocket-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..449147bee9a737aefce1aae6b67f1b672ff8ddef
Binary files /dev/null and b/lib/websocket-api.jar differ
diff --git a/lib/websocket-client-api.jar b/lib/websocket-client-api.jar
new file mode 100644
index 0000000000000000000000000000000000000000..22f38e825b487736759bfeb8a09667bb21995c64
Binary files /dev/null and b/lib/websocket-client-api.jar differ
diff --git a/sae/WEB-INF/src/controleur/CreerFil.java b/sae/WEB-INF/src/controleur/CreerFil.java
index 7f252aa690ff9e6427ed149d0469c00b61d2d9ad..f0cadc3bff5f3de3b8613def91096fdd6dd6215e 100644
--- a/sae/WEB-INF/src/controleur/CreerFil.java
+++ b/sae/WEB-INF/src/controleur/CreerFil.java
@@ -30,6 +30,7 @@ public class CreerFil extends HttpServlet {
         FilDeDiscussionDAO f = new FilDeDiscussionDAO();
         String nom = StringEscapeUtils.escapeHtml4(req.getParameter("nom"));
         String createuremail = StringEscapeUtils.escapeHtml4(req.getParameter("createuremail"));
+        String description = StringEscapeUtils.escapeHtml4(req.getParameter("description"));
         UtilisateurDao udao = new UtilisateurDao();
         if (!udao.emailExists(createuremail)) {
             req.setAttribute("error", "L'email n'existe pas.");
@@ -40,7 +41,8 @@ public class CreerFil extends HttpServlet {
             -1,
             nom,
             LocalDateTime.now(),
-            createuremail
+            createuremail,
+            description
         ));
         res.sendRedirect(req.getContextPath() + "/listerFil");
     }
diff --git a/sae/WEB-INF/src/controleur/EnvoyerMessage.java b/sae/WEB-INF/src/controleur/EnvoyerMessage.java
index 2fcaea9936d1ae2c8b720da8f193fc417f57c31b..583205744d808e8a419a2f4f2752b7c7ed77025f 100644
--- a/sae/WEB-INF/src/controleur/EnvoyerMessage.java
+++ b/sae/WEB-INF/src/controleur/EnvoyerMessage.java
@@ -1,17 +1,23 @@
 package controleur;
 
+import jakarta.servlet.annotation.MultipartConfig;
 import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.Part;
 import modele.Message;
 import modele.MessageDao;
 import jakarta.servlet.ServletException;
+import java.io.File;
 import java.io.IOException;
 import java.time.LocalDateTime;
 
 @WebServlet("/envoyerMessage")
+@MultipartConfig
 public class EnvoyerMessage extends HttpServlet {
+    private static final String UPLOAD_DIR = "uploads";
+
     public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
         if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
             res.sendRedirect(req.getContextPath() + "/login");
@@ -31,9 +37,33 @@ public class EnvoyerMessage extends HttpServlet {
         if (message == null || message.isEmpty()) {
             return;
         }
-        Message m = new Message(-1, message, LocalDateTime.now(), filId, email);
-        modele.MessageDao messageDao = new MessageDao();
+
+        // Handle file upload
+        Part filePart = req.getPart("file");
+        String fileName = null;
+        if (filePart != null && filePart.getSize() > 0) {
+            fileName = getFileName(filePart);
+            String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIR;
+            File uploadDir = new File(uploadPath);
+            if (!uploadDir.exists()) {
+                uploadDir.mkdir();
+            }
+            filePart.write(uploadPath + File.separator + fileName);
+        }
+
+        Message m = new Message(-1, message, LocalDateTime.now(), filId, email, fileName);
+        MessageDao messageDao = new MessageDao();
         messageDao.create(m);
         res.sendRedirect(req.getContextPath() + "/fil?id=" + filId);
     }
-}
+
+    private String getFileName(Part part) {
+        String contentDisposition = part.getHeader("content-disposition");
+        for (String cd : contentDisposition.split(";")) {
+            if (cd.trim().startsWith("filename")) {
+                return cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
+            }
+        }
+        return null;
+    }
+}
\ No newline at end of file
diff --git a/sae/WEB-INF/src/controleur/GetFils.java b/sae/WEB-INF/src/controleur/GetFils.java
index 87ad95b57b99c688d4f050d6871de85ab4545d65..d7376b1e928b424939b07460b4d0ecb04e914334 100644
--- a/sae/WEB-INF/src/controleur/GetFils.java
+++ b/sae/WEB-INF/src/controleur/GetFils.java
@@ -8,7 +8,7 @@ import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; // Importation du module
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 
 import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebServlet;
@@ -24,7 +24,8 @@ import modele.MessageDao;
 
 @WebServlet("/getFils")
 public class GetFils extends HttpServlet {
-    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
         if (req.getSession(false) == null || req.getSession().getAttribute("email") == null) {
             res.sendRedirect(req.getContextPath() + "/login");
             return;
@@ -35,26 +36,31 @@ public class GetFils extends HttpServlet {
         FilDeDiscussionDAO filDao = new FilDeDiscussionDAO();
         MessageDao messageDao = new MessageDao();
 
-        List<Abonnement> abonnements = abonnementDao.findAbonnements(email);
-        List<FilDeDiscussion> fils = new ArrayList<>();
-        Map<Integer, List<Message>> messagesMap = new HashMap<>();
+        try {
+            List<Abonnement> abonnements = abonnementDao.findAbonnements(email);
+            List<FilDeDiscussion> fils = new ArrayList<>();
+            Map<Integer, List<Message>> messagesMap = new HashMap<>();
 
-        for (Abonnement abonnement : abonnements) {
-            FilDeDiscussion fil = filDao.findById(abonnement.getIdFil());
-            fils.add(fil);
-            List<Message> messages = messageDao.findByFil(fil.getId());
-            messagesMap.put(fil.getId(), messages);
-        }
+            for (Abonnement abonnement : abonnements) {
+                FilDeDiscussion fil = filDao.findById(abonnement.getIdFil());
+                fils.add(fil);
+                List<Message> messages = messageDao.findByFil(fil.getId());
+                messagesMap.put(fil.getId(), messages);
+            }
 
-        ObjectMapper objectMapper = new ObjectMapper();
-        objectMapper.registerModule(new JavaTimeModule()); // Enregistrement du module
-        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.registerModule(new JavaTimeModule());
+            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
 
-        Map<String, Object> jsonResponse = new HashMap<>();
-        jsonResponse.put("fils", fils);
-        jsonResponse.put("messages", messagesMap);
+            Map<String, Object> jsonResponse = new HashMap<>();
+            jsonResponse.put("fils", fils);
+            jsonResponse.put("messages", messagesMap);
 
-        res.setContentType("application/json");
-        res.getWriter().write(objectMapper.writeValueAsString(jsonResponse));
+            res.setContentType("application/json");
+            res.getWriter().write(objectMapper.writeValueAsString(jsonResponse));
+        } catch (Exception e) {
+            res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            res.getWriter().write("{\"error\":\"Une erreur est survenue lors de la récupération des données.\"}");
+        }
     }
 }
\ No newline at end of file
diff --git a/sae/WEB-INF/src/modele/FilDeDiscussion.java b/sae/WEB-INF/src/modele/FilDeDiscussion.java
index 8b2cbb2fd4733397dca759d68a2bab36de08ed57..92c5c3e8b13677975ff8cbf4b37c1a2f85784b9f 100644
--- a/sae/WEB-INF/src/modele/FilDeDiscussion.java
+++ b/sae/WEB-INF/src/modele/FilDeDiscussion.java
@@ -7,15 +7,17 @@ public class FilDeDiscussion {
     private String nom;
     private LocalDateTime dateCreation;
     private String createurEmail;
+    private String description;
 
     public FilDeDiscussion() {
     }
 
-    public FilDeDiscussion(int id, String nom, LocalDateTime dateCreation, String createurEmail) {
+    public FilDeDiscussion(int id, String nom, LocalDateTime dateCreation, String createurEmail, String description) {
         this.id = id;
         this.nom = nom;
         this.dateCreation = dateCreation;
         this.createurEmail = createurEmail;
+        this.description = description;
     }
 
     public int getId() {
@@ -49,4 +51,12 @@ public class FilDeDiscussion {
     public void setCreateurEmail(String createurEmail) {
         this.createurEmail = createurEmail;
     }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
 }
diff --git a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
index 1fdd43bb9a18bb46c22cbd0f421d14226eb13926..4ae597e13c557fc4e6112c13a4363f2b00153440 100644
--- a/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
+++ b/sae/WEB-INF/src/modele/FilDeDiscussionDAO.java
@@ -19,6 +19,7 @@ public class FilDeDiscussionDAO {
                 f.setNom(rs.getString("nom"));
                 f.setDateCreation(rs.getTimestamp("datecreation").toLocalDateTime());
                 f.setCreateurEmail(rs.getString("createuremail"));
+                f.setDescription(rs.getString("description"));
             } else {
                 System.out.println("Fil de discussion inexistant");
             }
@@ -30,9 +31,10 @@ public class FilDeDiscussionDAO {
 
     public void create(FilDeDiscussion filDeDiscussion) {
         try (Connection con = DS.instance.getConnection()) {
-            PreparedStatement pstmt = con.prepareStatement("INSERT INTO filDeDiscussion (nom, createuremail) VALUES (?, ?)");
+            PreparedStatement pstmt = con.prepareStatement("INSERT INTO filDeDiscussion (nom, createuremail, description) VALUES (?, ?, ?)");
             pstmt.setString(1, filDeDiscussion.getNom());
             pstmt.setString(2, filDeDiscussion.getCreateurEmail());
+            pstmt.setString(3, filDeDiscussion.getDescription());
             pstmt.executeUpdate();
         } catch (Exception e) {
             System.err.println(e.getMessage());    
@@ -50,6 +52,7 @@ public class FilDeDiscussionDAO {
                 f.setNom(rs.getString("nom"));
                 f.setDateCreation(rs.getTimestamp("datecreation").toLocalDateTime());
                 f.setCreateurEmail(rs.getString("createuremail"));
+                f.setDescription(rs.getString("description"));
                 filsDeDiscussion.add(f);
             }
         } catch (Exception e) {
diff --git a/sae/WEB-INF/src/modele/Message.java b/sae/WEB-INF/src/modele/Message.java
index 371ef61b042f7aad4e024a6e45d0e183555304f9..f046418cb3b21f768fae07681774cebbc5b0154d 100644
--- a/sae/WEB-INF/src/modele/Message.java
+++ b/sae/WEB-INF/src/modele/Message.java
@@ -1,7 +1,5 @@
 package modele;
 
-import java.sql.Connection;
-import java.sql.PreparedStatement;
 import java.time.LocalDateTime;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -13,21 +11,18 @@ public class Message {
     private LocalDateTime datePublication;
     private int filId;
     private String auteurEmail;
-    private String imageUrl;
-    private int like;
-    private int unlike;
-
-    // Constructeurs, getters et setters
+    private String fileName;
 
     public Message() {
     }
 
-    public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail) {
+    public Message(int id, String contenu, LocalDateTime datePublication, int filId, String auteurEmail, String fileName) {
         this.id = id;
         this.contenu = contenu;
         this.datePublication = datePublication;
         this.filId = filId;
         this.auteurEmail = auteurEmail;
+        this.fileName = fileName;
     }
 
     public int getId() {
@@ -70,41 +65,16 @@ public class Message {
         this.auteurEmail = auteurEmail;
     }
 
-    @Override
-    public String toString() {
-        return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId=" + filId + ", auteurEmail=" + auteurEmail + '}';
-    }
-
-    public String getImageUrl() {
-        return imageUrl;
-    }
-
-    public int getLike() {
-        return like;
+    public String getFileName() {
+        return fileName;
     }
 
-    public void setLike(int like) {
-        this.like = like;
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
     }
 
-    public int getUnlike() {
-        return unlike;
-    }
-
-    public void setUnlike(int unlike) {
-        this.unlike = unlike;
-    }
-
-    // filepath: /Users/othemanek./Desktop/tomcat/webapps/sae/WEB-INF/src/modele/MessageDao.java
-    public void create(Message message) {
-        try (Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail, imageUrl) VALUES (?, ?, ?)");
-            ps.setString(1, message.getContenu());
-            ps.setInt(2, message.getfilId());
-            ps.setString(3, message.getAuteurEmail());
-            ps.executeUpdate();
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-        }
+    @Override
+    public String toString() {
+        return "Message{" + "id=" + id + ", contenu=" + contenu + ", datePublication=" + datePublication + ", filId=" + filId + ", auteurEmail=" + auteurEmail + '}';
     }
 }
diff --git a/sae/WEB-INF/src/modele/MessageDao.java b/sae/WEB-INF/src/modele/MessageDao.java
index 4ae3ecbd967411e16ba04996b3c60afe80659c7b..0687ea35a169c515a13790b2a13e294558bf86c3 100644
--- a/sae/WEB-INF/src/modele/MessageDao.java
+++ b/sae/WEB-INF/src/modele/MessageDao.java
@@ -20,6 +20,7 @@ public class MessageDao {
                 message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
                 message.setFilId(rs.getInt("filId"));
                 message.setAuteurEmail(rs.getString("auteurEmail"));
+                message.setFileName(rs.getString("fileName"));
             } else {
                 System.out.println("Message inexistant");
             }
@@ -41,6 +42,7 @@ public class MessageDao {
                 message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
                 message.setFilId(rs.getInt("filId"));
                 message.setAuteurEmail(rs.getString("auteurEmail"));
+                message.setFileName(rs.getString("fileName"));
                 messages.add(message);
             }
         } catch (Exception e) {
@@ -62,6 +64,7 @@ public class MessageDao {
                 message.setDatePublication(rs.getTimestamp("datePublication").toLocalDateTime());
                 message.setFilId(rs.getInt("filId"));
                 message.setAuteurEmail(rs.getString("auteurEmail"));
+                message.setFileName(rs.getString("fileName"));
                 messages.add(message);
             }
         } catch (Exception e) {
@@ -99,10 +102,11 @@ public class MessageDao {
 
     public void create(Message message) {
         try(Connection con = DS.instance.getConnection()) {
-            PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail) VALUES (?, ?, ?)");
+            PreparedStatement ps = con.prepareStatement("INSERT INTO message (contenu, filid, auteuremail, fileName) VALUES (?, ?, ?, ?)");
             ps.setString(1, message.getContenu());
             ps.setInt(2, message.getfilId());
             ps.setString(3, message.getAuteurEmail());
+            ps.setString(4, message.getFileName());
             ps.executeUpdate();
         } catch (Exception e) {
             System.out.println(e.getMessage());
diff --git a/sae/WEB-INF/vue/creerFil.jsp b/sae/WEB-INF/vue/creerFil.jsp
index b7f303fb9d13c7a7edd00a4dcf1d84d656c701d3..253ef0df296d1ed48c617725b9d65c73dc588151 100644
--- a/sae/WEB-INF/vue/creerFil.jsp
+++ b/sae/WEB-INF/vue/creerFil.jsp
@@ -67,6 +67,9 @@
                     <label for="createuremail">Email du créateur:</label>
                     <input type="email" class="form-control" id="createuremail" name="createuremail" required>
                 </div>
+                <div class="form-group">
+                    <label for="description">Description:</label>
+                    <textarea class="form-control" id="description" name="description" rows="3" required></textarea>
                 <button type="submit" class="btn btn-primary btn-block">Créer</button>
             </form>
         </div>
diff --git a/sae/WEB-INF/vue/fil.jsp b/sae/WEB-INF/vue/fil.jsp
index d19505d3b29dc34241b13628b7f46a6d394a21e9..aeb1d6a17e4c75432f0eb7dbc1f65a52f4b5115b 100644
--- a/sae/WEB-INF/vue/fil.jsp
+++ b/sae/WEB-INF/vue/fil.jsp
@@ -139,25 +139,32 @@
                 LocalDateTime datePublication = m.getDatePublication();
                 String formattedDate = (datePublication != null) ? datePublication.format(formatter) : "Date non disponible";
             %>
-                <div class="message-item">
-                    <div class="avatar">
-                        <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar">
-                    </div>
-                    <div class="message-content">
-                        <h4><%= mdao.findUserName(m.getAuteurEmail()) %></h4>
-                        <p class="message-date"><%= formattedDate %></p>
-                        <p><%= m.getContenu() %></p>
-                    </div>
+            <div class="message-item">
+                <div class="avatar">
+                    <img src="https://www.gravatar.com/avatar/<%= m.getAuteurEmail().hashCode() %>?d=identicon&s=40" alt="Avatar">
                 </div>
+                <div class="message-content">
+                    <h4><%= mdao.findUserName(m.getAuteurEmail()) %></h4>
+                    <p class="message-date"><%= formattedDate %></p>
+                    <p><%= m.getContenu() %></p>
+                    <% if (m.getFileName() != null) { %>
+                        <img src="<%= request.getContextPath() %>/uploads/<%= m.getFileName() %>" alt="Image" class="img-fluid mt-2">
+                    <% } %>
+                </div>
+            </div>
             <% } %>
         </div>
 
         <div class="message-form">
-            <form action="envoyerMessage" method="post">
+            <form action="envoyerMessage" method="post" enctype="multipart/form-data">
                 <div class="form-group">
                     <label for="contenu">Votre message :</label>
                     <textarea class="form-control" id="contenu" name="contenu" rows="3" required></textarea>
                 </div>
+                <div class="form-group">
+                    <label for="file">Ajouter une image :</label>
+                    <input type="file" class="form-control-file" id="file" name="file">
+                </div>
                 <input type="hidden" name="filId" value="<%= id %>">
                 <button type="submit" class="btn btn-primary">Envoyer</button>
             </form>
diff --git a/sae/WEB-INF/vue/listerFil.jsp b/sae/WEB-INF/vue/listerFil.jsp
index 12a35482bee0b34e7d3589ce1a31f1a57ce51621..f36b805e9305282ae1dcdad3b7873edae5fe90b4 100644
--- a/sae/WEB-INF/vue/listerFil.jsp
+++ b/sae/WEB-INF/vue/listerFil.jsp
@@ -85,7 +85,9 @@
                         <p class="thread-name mb-0"><%= f.getNom() %></p>
                         <a href="<%= request.getContextPath() %>/suivreFil?id=<%= f.getId() %>" class="btn btn-primary btn-sm">Suivre</a>
                     </h4>
-                    <!-- potentiellement mettre une description -->
+                    <% if (f.getDescription() != null) { %>
+                        <p class="thread-description"><%= f.getDescription() %></p>
+                    <% } %>
                 </div>
             <% 
                     }
diff --git a/script.sql b/script.sql
index 96061b59cd0d7a7723157205daf86724119f294d..fe167bc1442c5a52e57dd82286514c38dab706ae 100644
--- a/script.sql
+++ b/script.sql
@@ -16,6 +16,7 @@ CREATE TABLE FilDeDiscussion (
     nom VARCHAR(100) NOT NULL,
     dateCreation TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
     createurEmail VARCHAR(100),
+    description TEXT,
     CONSTRAINT pk_fil PRIMARY KEY (id),
     CONSTRAINT fk_createur FOREIGN KEY (createurEmail) REFERENCES Utilisateur(email)
         ON DELETE SET NULL
@@ -27,6 +28,7 @@ CREATE TABLE Message (
     datePublication TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
     filId INTEGER,
     auteurEmail VARCHAR(100),
+    fileName VARCHAR(255),
     CONSTRAINT pk_message PRIMARY KEY (id),
     CONSTRAINT fk_fil FOREIGN KEY (filId) REFERENCES FilDeDiscussion(id)
         ON DELETE CASCADE,