Upload+insertion du nom de fichier uploadé dans la base de données
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:
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:
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> |
le code du pageUpload.jsp
Code:
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:
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:
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