IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Upload+insertion du nom de fichier uploadé dans la base de données


Sujet :

JSF Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut 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 : 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

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    pourquoi est-ce que tu passe par un formulaire non-jsf au lieu d'utiliser un composant JSF pour les upload de fichier, c'est beaucoup plus simple . Tu peux par exemple utiliser le composant t:fileUpload de tomahawk.

    Quand à mettre deux form l'une dans l'autre, ca n'a pas de sens et c'est interdit en html.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    pourquoi est-ce que tu passe par un formulaire non-jsf au lieu d'utiliser un composant JSF pour les upload de fichier, c'est beaucoup plus simple . Tu peux par exemple utiliser le composant t:fileUpload de tomahawk.
    C'est vrai que ce composant permet de faire l'upload; mais, ce que je veux c'est l'upload + insertion des informations relatives au fichier uploadé (surtout son nom dans la base de données.

    Citation Envoyé par tchize_ Voir le message
    Quand à mettre deux form l'une dans l'autre, ca n'a pas de sens et c'est interdit en html.
    Je vous remercie pour cette information.

    Ce que j'arrive à faire jusqu'à maintenant: utiliser une seule form (en désirant avoir l'upload + insertion dans la base de données du nom de fichier 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
    46
    <%@ 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 </title>
    </head>
    <body>
    <f:view>
    <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 la deuxième page est la suivante :
    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
    <%-- 
        Document   : page4
        Created on : 5 févr. 2008, 16:08:16
        Author     : kaoutar
    --%>
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
       <%@ page session="true" %>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <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,java.io.OutputStream,java.io.File" %>
            <% 
            // Check that we have a file upload request
    System.out.println("Content Type ="+request.getContentType());
            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();
     
    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>
    </html>
    Le résultat de l'exécution : l'insertion des informations dans la base de données + une erreur ,en cliquant sur le bouton, qui est le suivante:
    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
     
    type Rapport d'exception
     
    Message
     
    DescriptionLe serveur a rencontré une erreur interne () qui
     
    l'a empêché de remplir cette requête.
     
    Exception
     
    javax.servlet.ServletException: org.
     
    apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
     
    Cause racine
     
    org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
    j'attends vos aides et merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    JE vois tojours pas pourquoi tu t'emmerde avec deux formulaire. C'est pas parce que tu met un composant d'upload dans ton formulaire jsf, avec par exemple t:fileupload, que tu ne pourra aussi ajouter des input normaux. Et dans l'action de ton formulaire tu pourra faire ce que tu veux de ton input.

    Quanad à ton message d'erreur, il indique en gros qu'on a pas soumis de fichier.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 167
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Jtu met un composant d'upload dans ton formulaire jsf, avec par exemple t:fileupload, que tu ne pourra aussi ajouter des input normaux. Et dans l'action de ton formulaire tu pourra faire ce que tu veux de ton input.
    Grâce à votre aide, j'ai réussi à résoudre mon problème; je vous remercie infiniment.
    Pour ceux qui s'intéressent à sujet, vous pouvez trouver une partie de solution ici

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insertion des données d'un fichier word dans une base de données
    Par pigeon015 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/02/2007, 09h04
  2. Réponses: 1
    Dernier message: 09/05/2006, 12h00
  3. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 19h08
  4. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 22h41
  5. Enregistremenbt d'un fichier WORD dans une base de données
    Par yam49 dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/08/2004, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo