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

Servlets/JSP Java Discussion :

[Servlet & JSP]Upload de fichier


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut [Servlet & JSP]Upload de fichier
    Bonjour,

    J'utilise la bibliotheque commons-fileupload de Apache pour faire de l'upload de fichiers. Je mets donc un champs <input type="file"> dans un formulaire HTML et je recupere la requete dans ma servlet. Cela marche tres bien et j'arrive à recuperer mon fichier.

    Le probleme est que dans mon formulaire, les autres champs (principalement de type <input type="text">) ne sont pas envoyes dans la requete. Je ne peux donc pas valider leurs contenu.

    Comment faire pour faire collaborer dans la meme requete des champs file et d'autres types de champs ?

    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    En fait, tout tes champs sont envoyé.
    La seule chose est que, ton formulaire est de type 'file' donc tout les champs sont envoyé par la méthode d'envoit des formulaire de type 'file'.

    Avec commons-fileupload c'est trés simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    FileItem item = (FileItem) it.next();
    if(item.isFormField())
    {
    	String name = item.getFieldName();
    	String value = item.getString();
    	//voici un champs
    }
    else
    {
            byte [] data = item.get();
    	String name = item.getName();
            //voici ton fichier
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut
    Ok, merci.

    Mais alors qu'en est-il de mes champs de type <select> par exemple ?
    Il semble qu'a partir d'un item je n'ai acces qu'a "getString()"... Si je veux recuperer un tableau de valeurs je fais comment ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut
    Bon, le probleme n'est pas tout a fait résolu :

    J'utilise donc la commons-fileupload de Apache pour parser la requete de type multipart/form-data.
    Je comprend bien qu'il m'est alors impossible d'utiliser request.getParameter() pour obtenir le contenu d'un champs. Mais d'un autre côté je ne vois pas bien pourquoi je devrai utiliser la bibliotheque d'Apache commons-upload pour faire cela. Actuellement j'ai le code suivant pour recuperer un fichier :

    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
    DiskFileItemFactory dfif = new DiskFileItemFactory(
    							1*1024*1024,
    							new File(PagesConfiguration.getWebContentPath()+"/temp"));
     
    		ServletFileUpload sfu = new ServletFileUpload(dfif);
     
    		try {
    			List items = sfu.parseRequest(request);
    			// Process the uploaded items
    			for (Iterator iter = items.iterator(); iter.hasNext();) {
    				FileItem item = (FileItem) iter.next();
    				if(!item.isFormField()){
    					processFileUpload(); 
    				}
    			}
    		} catch (FileUploadException e) {
    			logger.error("Erreur lors de l'upload de fichier",e);
    		}
    Cela marche bien mais je ne vois pas du tout l'interet de créer un DiskFileItemFactory et un ServletFileUpload lorsqu'il s'agit de récupérer la valeur d'un champs texte. Actuelement j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    DiskFileItemFactory dfif = new DiskFileItemFactory(
    				10*1024*1024, /* 10MB */
    				new File(PagesConfiguration.getWebContentPath()+"/temp"));
    		ServletFileUpload upload = new ServletFileUpload(dfif); 
    		try {
    			for (Iterator iter = upload.parseRequest(request).iterator(); iter.hasNext();) {
    				FileItem item = (FileItem) iter.next();
    				if(item.isFormField() ){
    					processFormField();
    				}
    			}
    		} catch (FileUploadException e) {
    			logger.error("Impossible de lire la valeur du TextField ",e);
    		}
    De plus, lorsque je melange des input de type "text" et des input de type "file" dans mon formulaire, même avec le code ci dessus je n'ai que le premier champs qui est récupéré dans ma servlet. Les autres semblent effacés.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 113
    Points : 64
    Points
    64
    Par défaut
    En fait il semblerait que lorsque j'execute la commande "upload.parseRequest(request)" ma requete se vide. Or, dans mon application j'ai besoin d'executer cette methode plusieurs fois pour une même requete. Savez vous comment faire en sorte que ma requete reste intacte ?

    Merci

Discussions similaires

  1. [Servlet]uploader un fichier
    Par napster dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 05/03/2009, 10h13
  2. [JSP] Upload de fichier capricieux
    Par enguerran dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 19/06/2006, 09h05
  3. Réponses: 3
    Dernier message: 08/05/2006, 23h31
  4. [JSP] Problème d'upload de fichiers
    Par Ludo_xml dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/09/2005, 11h20
  5. [SERVLET][JSP] Ecriture de fichier par la servlet
    Par Jabwoo dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/07/2004, 17h57

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