Bonjour,
Je possède un formulaire dans ma page jsp qui me permet de rentrer des informations sur une image (nom, description, etc...) et de choisir une image sur le disque dur.
J'aimerai sauvegarder les informations dans ma base de données et l'image sur le serveur tomcat.
Pour l'upload de l'image j'utilise javazoom.upload.UploadBean.
Une fois dans mon code java, je récupère dans ma fonction doPost un MultipartFormDataRequest. Dans mon fichier jsp, mon formulaire est donc définit avec enctype="multipart/form-data".
Le problème c'est qu'avec la balise enctype="multipart/form-data", j'arrive a récupérer l'image et la mettre sur le serveur, mais je n'arrive pas a récupérer les autres infos du formulaire.
Mon getParameter me renvoie "null".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request); String idUser = mrequest.getParameter("idUser");
Si j'enlève enctype="multipart/form-data" et que je récupère dans mon code java mes données avec l'objet HttpServletRequest (donc pas multi) j'arrive a tout récupérer sauf l'image.
Comprenez vous ce qui cloche dans mon code?
Voici le fichier jsp:
Le post envoi directement vers EnregistrerImage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="connexionBase.ConnexionBase" %> <%@page import="java.sql.Connection" %> <%@page import="java.awt.*" %> <%@page import="objets.Image" %> <%@page import="java.util.List" %> <%@page import="java.util.ArrayList" %> <%@ page language="java" import="javazoom.upload.*,java.util.*" %> <%@ page errorPage="ExceptionHandler.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <jsp:useBean id="userCo" class="beans.UserCoBean" scope="session"></jsp:useBean> <jsp:useBean id="upBean" scope="page" class="javazoom.upload.UploadBean" > <jsp:setProperty name="upBean" property="folderstore" value="c:/uploads" /> <jsp:setProperty name="upBean" property="parser" value="<%= MultipartFormDataRequest.CFUPARSER %>"/> <jsp:setProperty name="upBean" property="parsertmpdir" value="c:/temp"/> <jsp:setProperty name="upBean" property="overwritepolicy" value="nametimestamp" /> </jsp:useBean> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Poster une image</title> </head> <body> <h2>Bienvenue <jsp:getProperty name="userCo" property="nom"/> <jsp:getProperty name="userCo" property="prenom"/></h2><br /> <form action="EnregistrerImage" name="form" method="POST" enctype="multipart/form-data"> <fieldset><legend>Poster une image</legend> <input type="hidden" id="idUser" name="idUser" value='<jsp:getProperty property="id" name="userCo"/>' /> <table> <tr> <th>Nom :</th> <td><input type="text" id="nomImg" name="nomImg" /></td> </tr> <tr> <th>Description :</th> <td><textarea id="descImg" name="descImg"></textarea></td> </tr> <tr> <th>Catégorie :</th> <td><select name="categ"> <option selected></option> <option value="Sport">Sport</option> <option value="Nature">Nature</option> <option value="Voiture">Voitures</option> <option value="Celebrite">Célébrités</option> </select> </td> </tr> <tr> <th>Fichier :</th> <td><input type="file" id="fichierImg" name="fichierImg"/></td> </tr> </table> <br> <input type=submit id="btnEnvoi" value="Envoyer" /> </fieldset> </form> <script type="text/javascript"> </script> </body> </html>
Voici le fichier java EnregistrerImage.java:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 package servlets; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.sql.SQLException; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javazoom.upload.MultipartFormDataRequest; import javazoom.upload.UploadBean; import javazoom.upload.UploadException; import javazoom.upload.UploadFile; import org.apache.tomcat.util.http.fileupload.FileItem; import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload; import traitements.Enregistrement; import traitements.GetIdCateg; public class EnregistrerImage extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public EnregistrerImage() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // On upload l'image sur le serveur uploadImage(request, response); if (MultipartFormDataRequest.isMultipartFormData(request)) { try { MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request); String idUser = mrequest.getParameter("idUser"); out.print(idUser); } catch (UploadException ex) { out.print(ex.getMessage()); } } } // // Fonction d'upload de l'image sur le serveur tomcat // protected void uploadImage(HttpServletRequest request, HttpServletResponse response) throws IOException { UploadBean upBean = new UploadBean(); try { upBean.setFolderstore("c:/uploads"); } catch (UploadException ex) { } upBean.setParser(MultipartFormDataRequest.CFUPARSER); upBean.setParsertmpdir("c:/temp"); upBean.setOverwritepolicy("nametimestamp"); if (MultipartFormDataRequest.isMultipartFormData(request)) { try { MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request); Hashtable files = mrequest.getFiles(); if ((files != null) && (!files.isEmpty())) { upBean.store(mrequest, "fichierImg"); } } catch (UploadException ex) { } } } }
J'ai une autre question tant qu'on y est:
Le but de mon appli est de permettre à un utilisateur de choisir une image sur son pc, l'enregistrer sur le serveur, et pouvoir lister toutes les images qu'il a ajouté.
Je me demandai si il était possible de sauvegarder l'image directement dans la base de données au lieu du serveur. Car pour ré-afficher les images, il faut utiliser la balise <img /> dans le code jsp avec le paramètre "src". Le problème c'est que si l'image est sur la base de données, elle ne possède pas de chemin (url) à mettre dans src. Y a-t-il un subtile subterfuge pour afficher une image depuis la bdd?
Voilà, merci d'avance pour votre aide!
Partager