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):
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>
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
 <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>&nbsp;</td>
            </tr>
    </table>
    </form>
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
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>
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.
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 :
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>
Ce code m'a permis de faire l'upload seulement.
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):
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">
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.
Merci d'avance