Bonjour,
je suis en cours de développement d'une application web J2EE (jpa+jsf+base de données MySQL), parmi les fonctionnalités de ce projet, est l'upload des fichiers volumineux vers le serveur.
Ainsi, j'ai trouvé beaucoup des exemples des codes permettant d'insérer des fichiers sous forme de "Blob" dans la base de données; d'autres codes assurant l'upload vers le serveur.
Pour mon cas,je dois insérer le nom de chaque fichier dans la base de données lors l'upload; en plus le transfert du fichier entier vers le serveur.
Voici, le code qui me permet d'insérer les informations (content type; nom du fichier, description) sur chaque fichier dans la base de données (sans faire l'upload):
et ceci le code permettant de faire l'upload seulement:
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 <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%> <html> <head> <title>Transfert des images médicales</title> </head> <body> <f:view> <!--form method="post" name="form1" action="page4.jsp" enctype="multipart/form-data"--!> <h:form id="formularioUpload" enctype="multipart/form-data"> <h:messages id="messageList" styleClass="error" showSummary="true" showDetail="true" /> <h:panelGrid columns="2" > <f:facet name="header"> <h:outputText id="lHeader" value="Transfert des fichiers au serveur"/> </f:facet> <f:facet name="footer"> <h:outputText value=" "/> </f:facet> <!-- DOCUMENTO --> <h:outputLabel for="docDocumento" value="Fichier"/> <h:panelGroup> <x:inputFileUpload id="docDocumento" value="#{uploadBean.docDocumento}" storage="file" required="true"/> </h:panelGroup> <!-- DESCRIPCIÓN DEL DOCUMENTO --> <h:outputLabel for="descripcion" value="Description"/> <h:panelGroup id="descripcion"> <h:inputTextarea value="#{uploadBean.descripcion}" cols="50" rows="4" id="idDescripcion" required="true" > <f:validateLength minimum="3" maximum ="1000" /> </h:inputTextarea> </h:panelGroup> <!-- BOTÓN QUE SUBMITE EL FORMULARIO --> <h:panelGroup> <h:commandButton type="submit" id="boton1" value="Envoyer" action="#{uploadBean.upload}"/> </h:panelGroup> </h:panelGrid> </h:form> </f:view> </body> </html>
le code du pageUpload.jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <form method="post" enctype="multipart/form-data" name="form1" action="pageUpload.jsp"> <table width="386" border="1"> <tr> <td width="120">Fichier : </td> <td width="250"><input type="file" name="fichier"></td> </tr> <tr> <td><input type="submit"></td> <td> </td> </tr> </table> </form>
Chaque code (insertion dans la BD ; upload) fonctionne bien, mais quand j'ai essayé de mélanger les deux ensembe ((insertion dans la BD et upload en meme temps), j'ai trouvé des problèmes; c'est à dire l'une des fonctions marche bien , l'autre non.
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 <body> <%@ page import="org.apache.commons.fileupload.*,org.apache.commons.fileupload.DiskFileUpload,java.util.List,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.*,java.util.*,java.io.*,java.io.InputStream" %> <% // Check that we have a file upload request boolean isMultipart = ServletFileUpload.isMultipartContent(request); // Create a factory for disk-based file items FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request List /* FileItem */ items = upload.parseRequest(request); // Process the uploaded items Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { String fieldName = item.getFieldName(); if(fieldName.equals("name")) request.setAttribute("msg", "Thank You: " + item.getString()); } else { File fullFile = new File(item.getName()); String nom =fullFile.getName(); File savedFile = new File("D:/upload/", fullFile.getName()); item.write(savedFile); out.println(nom); } } %> est transféré au serveur </body>
En fait, j'ai essayé de faire une form dans une autre form (je ne sais pas est qu'il est juste ou non de faire ça). Et, ci-dessous le code :
Ce code m'a permis de faire l'upload seulement.
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 <body> <f:view> <form method="post" name="form1" action="pageUpload.jsp" enctype="multipart/form-data"> <h:form id="formularioUpload" enctype="multipart/form-data"> <h:messages id="messageList" styleClass="error" showSummary="true" showDetail="true" /> <h:panelGrid columns="2" > <f:facet name="header"> <h:outputText id="lHeader" value="Transfert des fichiers au serveur"/> </f:facet> <f:facet name="footer"> <h:outputText value=" "/> </f:facet> <!-- DOCUMENTO --> <h:outputLabel for="docDocumento" value="Fichier"/> <h:panelGroup> <x:inputFileUpload id="docDocumento" value="#{uploadBean.docDocumento}" storage="file" required="true"/> </h:panelGroup> <!-- DESCRIPCIÓN DEL DOCUMENTO --> <h:outputLabel for="descripcion" value="Description"/> <h:panelGroup id="descripcion"> <h:inputTextarea value="#{uploadBean.descripcion}" cols="50" rows="4" id="idDescripcion" required="true" > <f:validateLength minimum="3" maximum ="1000" /> </h:inputTextarea> </h:panelGroup> <!-- BOTÓN QUE SUBMITE EL FORMULARIO --> <h:panelGroup> <h:commandButton type="submit" id="boton1" value="Envoyer" action="#{uploadBean.upload}"/> </h:panelGroup> </h:panelGrid> </h:form> </form> </f:view> </body>
Quand, j'ai inversé ces deux lignes, seulement la fonction d'insertion dans la BD fonctionne (avec apparition d'une erreur en cliquant sur le bouton):
je ne sais pas est ce que c'est acceptable ce que j'ai fait (2 form); j'attends des gens capables de m'éclaircir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <form method="post" name="form1" action="pageUpload.jsp" enctype="multipart/form-data"> <h:form id="formularioUpload" enctype="multipart/form-data">
Merci d'avance
Partager