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 :

[fileUpload] Toujours d'actualité pour Servlet ?


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut [fileUpload] Toujours d'actualité pour Servlet ?
    Bonjour,

    Après avoir lu des tutorials sur la façon d'utiliser l'API de fileUpload d'Apache, j'avoue que je reste sur ma fain.

    L'API a l'air sympa et tout, mais impossible de l'implémenter pour que ça fonctionne chez moi... la raison : simplement que les tutoriels que j'ai vu utilisait la version 1.1.1, et j'ai downloadé la toute dernière version 1.2.1 qui a l'air de fonctionner différemment.

    Voici le code de ma JSP (upload form) :
    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
     
     
    <body>
     
    <BR />
     
    <nested:form enctype="multipart/form-data" action="/detail-view">
    	<bean:message key="upload.button.label"/>&nbsp;:<BR />
    	<input name="fileToUpload" class="btnD" id="file" size="15" type="file"/>&nbsp;
    	<input type="submit" class="btnD" name="action" value="uploadFile" />
    </nested:form>
     
    <BR />
     
    </body>
    Est-ce que quelqun pourrait me dire quel code appliquer dans ma servlet pour récupérer le contenu du fichier ainsi uploader ? En utilisant l'API fileUpload version 1.2.1 ou autre chose, peu m'importe tant que ça fonctionne.

    J'ai tenté plusieurs chose en dehors de fileUpload, voici quelques unes de mes dernières tentatives :
    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
     
     
    	public ActionForward uploadFile (ActionMapping 				theMapping,
    										ActionForm 				theForm,
    										HttpServletRequest 		theRequest,
    										HttpServletResponse 	theResponse) {
     
    		String myContentType = theRequest.getContentType();
    		if ( myContentType != null && myContentType.indexOf("multipart/form-data") >= 0 ){
     
    			String theFile = theRequest.getParameter("fileToUpload");
    			logger.warn("theFile => "+theFile);
    			try{
    				DataInputStream in = new DataInputStream(theRequest.getInputStream());
    				int formDataLength = theRequest.getContentLength();
     
    				logger.warn("[uploadFile] Input stream length : "+formDataLength);
     
    				byte dataBytes[] = new byte[formDataLength];
    				in.readFully(dataBytes);
    				in.close();
     
    				logger.warn("[uploadFile] Content length : "+dataBytes.length);
    				logger.warn("[uploadFile] Content : "+new String(dataBytes));
    			}catch(IOException e){
    				logger.error("[uploadFile] IOException while reading uploaded file : "+e.getMessage());
    			}
     
    		}
     
    		return theMapping.findForward(JSP_APP_DET_VIEW);
    	}
    En vous remerciant par avance pour votre aide.

    Cordialement.

  2. #2
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Honnêtement je suis paumé avec l'API fileUpload.

    Tout le monde la recommande dans ce forum, mais null part je ne vois d'exemple concret avec la toute dernière version (et je ne trouve pas où télécharger une version moins récente)

    En utilisant la dernière version, la classe 'ServletFileUpload' n'étant plus présente, la plupart des tutoriels deviennent inutilisables.

    D'ailleurs sur le site d'apache lui-même, il me semble avoir vu dans la FAQ que pour l'utilisation via les Servlet de cet utilitaire, il faut oublier car les Servlets font déjà un tri du contenu envoyé dans l'objet Request, du coup rien n'est trouvé via l'API fileUpload, ou du moins via l'utilisation qu'il en fait dans la plupart des tutoriels.

    Est-ce que je me trompe, est-ce que quelqun sait comment faire ?

    Mon erreur pourrait-elle venir du fait que je tente d'accéder au fichier depuis une action et non depuis la méthode doPost de ma servlet (de ce que j'ai lu dans d'autres discussions ?

  3. #3
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Bon,

    Il se trouve que l'un de mes sous projets (dépendance de projet à projet) intégrait déjà l'API fileupload dans une version bien plus ancienne (l'une des premières) qui ne comprenait pas la classe 'ServletFileUpload'. Or cette version de l'API prennait l'ascendant point de vue priorité classpath sur la nouvelle version que j'ai intégré dans mon autre application, rendant pour le coup inutile et non reconnue cette nouvelle version, d'où ma galère et mes questions.

    Erreur bête donc, comme la plupart du temps d'ailleurs.

    Je vais donc me remettre à la tâche sur les différent tutoriel que j'ai vu, ça devrait fonctionner maintenant que ce problème de classpath est résolu.

    Désolé pour le dérangement ^^

  4. #4
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Veux tu que je te mette en piece jointe la version 1.2 que j'utilise ?

    De plus le code que tu utilises ne repose pas sur les portions de code cité au niveau de la documentation qu'il faut utiliser

    http://commons.apache.org/fileupload/using.html


    Je viens de télécharger la derniere API et la servlet est toujours bien présente import org.apache.commons.fileupload.servlet.ServletFileUpload

  5. #5
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Bonjour Link,

    Merci pour ton intérêt dans un premier temps.

    Effectivement, le code que j'ai mis plus haut n'avais aucun lien avec l'API, j'avais codé via l'API dans un premier temps, et voyant que mes package n'étaient pas détecté (pour la raison citée plus haut), j'ai tenté autre chose, sans l'API.

    Désormais donc, j'ai bien suivi les recommandations du site (notamment celle de la page que tu as donné) et voici mon code (simpliste pour commencer) :

    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
     
     
    	public ActionForward uploadFile (ActionMapping 				theMapping,
    										ActionForm 				theForm,
    										HttpServletRequest 		theRequest,
    										HttpServletResponse 	theResponse) {
     
     
    		String myContentType = theRequest.getContentType();
    		if ( myContentType != null && myContentType.indexOf("multipart/form-data") >= 0 ){
     
    			// Create a factory for disk-based file items
    			FileItemFactory factory = new DiskFileItemFactory();
     
    			// Create a new file upload handler
    			ServletFileUpload upload = new ServletFileUpload(factory);
     
    			try{
    				// Parse the request
    				List items = upload.parseRequest(theRequest);
    				logger.warn("Nb items = "+items.size());
     
    			}catch(FileUploadException e){
    				logger.error("FUE : "+e.getMessage());
    			}catch(Exception e){
    				logger.error("OE : "+e.getMessage());
    			}
     
    		}
     
     
    		return theMapping.findForward(JSP_APP_DET_VIEW);
    	}
    Mon résultat (traces) est le suivant : il n'y a aucun item de récupéré.

    Je pense que cela vient de ce fait là : http://commons.apache.org/fileupload...n-action-fails
    Struts parse automatiquement les requettes. Pour le coup il faut que je trouve autre chose, ou du moins comment faire différemment.

    Je vois que tu as déjà travaillé avec, as-tu une idée (ça ira toujours plus vite ^^) ?

  6. #6
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    Je passe par du struts aussi avec cette API et aucun pb.

    Je te renvoie sur un ancien post

    http://www.developpez.net/forums/d71...t/#post4140129

  7. #7
    kij
    kij est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Par défaut
    Ok, j'ai beau utiliser le même code que le tiens, ça ne fonctionne pas (je m'arrête juste à la récupération de la liste des items).

    Toujours aucun item de récupéré.

    J'ai lu que certains utilisent ce code à l'intérieur d'une méthode doPost. Est-il obligatoire d'appeler une méthode nommée 'doPost' ? S'agit-il d'une méthode commune de la servlet ? Car pour le moment, j'utilise le code à l'intérieur de ma méthode de la classe d'action appelée.

Discussions similaires

  1. iFrames toujours d'actualité ?
    Par Lolie11 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/05/2007, 15h35
  2. configuration apache pour servlet
    Par mikees dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 08/05/2007, 14h42
  3. [débutant].besoin d'aide pour servlet
    Par 2tsiris dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 30/03/2006, 14h36
  4. [Tiles] Toujours d'actualité?
    Par vallica dans le forum Struts 1
    Réponses: 8
    Dernier message: 29/03/2006, 11h08

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