Uploader un fichier en java

Uploader un fichier en java - Java - Programmation

Marsh Posté le 09-09-2009 à 15:35:16    

Bonjour,  
 
J'aimerais savoir comment uploader un fichier en java.
 
J'ai essayer de mettre le type "file" dans ma jsp mais quand je recupere la valeur de "source"
j'obtient seulement le nom du fichier, et je voudrais avroir le chemin du fichier pour pouvoir le traiter
 
quelqu'un pourrait m'aider svp?
 
voici ma JSP
 
<code>
        <tr>
            <td class="row1" width="50%">
                <span class="gen">Fichier :</span>
            </td>
            <td class="row2" width="50%">
                <input type="file" name="source">
            </td>
        </tr>
</code>
 
 
et mon controlleur
 
 
<code>
 
 String source = (String) request.getParameter("source" );
 System.out.println("source = " + source);
 
</code>
 
 
Merci

Reply

Marsh Posté le 09-09-2009 à 15:35:16   

Reply

Marsh Posté le 09-09-2009 à 16:01:58    

Salut g25453,
 
Quand tu envoies un fichier, n'oublie pas que cela doit se faire dans un formulaire avec la méthode POST avec le type d'encodage mutipart/form-data:
 

Code :
  1. <form action="http://serveur.com/requete.jsp" enctype="multipart/form-data" method="post">


 
Ensuite, depuis Java EE 6 (c'est tout récent), il est possible de récupérer les fichiers transmis avec ce type d'encodage sous la forme d'un stream sans avoir recours à des bibliothèques Java externes. Tu dois faire comme ceci:
 

Code :
  1. InputStream input = request.getPart("source" ).getInputStream();


 
où request est un objet de type HttpServletRequest.
 
Ensuite tu peux rediriger ce stream dans un fichier de sortie sur le disque par exemple.


Message édité par cbeyls le 09-09-2009 à 16:02:29
Reply

Marsh Posté le 09-09-2009 à 16:27:57    

En attendant que Java EE 6 sorte en version finale et soit plus utilisé, tu peux utiliser la bibliothèque Commons fileUpload pour faire la même chose. Voici le code java pour ton exemple:
 

Code :
  1. ServletFileUpload upload = new ServletFileUpload();
  2. FileItemIterator iter = upload.getItemIterator(request);
  3. while (iter.hasNext()) {
  4.    FileItemStream item = iter.next();
  5.    if ("source".equals(item.getFieldName())) {
  6.        InputStream input = item.openStream();
  7.        ...
  8.    }
  9. }


 
où request est un objet de type HttpServletRequest.

Reply

Marsh Posté le 11-09-2009 à 15:00:03    

Bonjour, merci pour ta reponse, mais
request."getPart" n'existe pas, cette methode n'existe pas pour request.
 
 
et pour la 2ème solution iter = upload.getItemIterator(request);
 
le upload est en rouge, d'ou il vient?
 
Merci

Reply

Marsh Posté le 11-09-2009 à 15:03:15    

pour la 2eme solution "le upload", j'ai compris merci

Reply

Marsh Posté le 11-09-2009 à 15:35:15    

InputStream input = item.openStream();
 
est-ce possible de recuperer le chemin du fichier?

Reply

Marsh Posté le 12-09-2009 à 04:36:08    

Salut g25453,
 
Comme je le disais la première solution n'est possible qu'avec Java EE 6, le nouveau Java qui doit sortir plus tard dans l'année. On peut déjà le télécharger sous forme de Preview. Dans les versions précédentes dont celle que tu utilises certainement, la méthode getPart() n'existe pas encore.
 
Donc je te conseille ma 2e solution qui a l'avantage de fonctionner comme la première (tu récupères un stream), afin que plus tard tu puisses modifier le code pour l'implémenter avec la première solution sans devoir changer la logique.
 
Avec cette solution il n'y a pas de chemin de fichier à récupérer puisque le fichier n'a pas encore été écrit sur le disque: tu lis directement le stream que le client envoie et c'est à toi d'ouvrir un fichier en écriture où tu veux sur le disque pour y écrire le contenu du stream, au cas où tu veux le stocker sur le disque. Avantages: tu peux choisir de ne pas traiter certains fichiers ou tu peux les envoyer ailleurs que sur le disque. Bref tu as le choix de faire ce que tu veux avec les fichiers envoyés par l'utilisateur. item.getName() te renvoie le nom de fichier d'origine, au cas où tu souhaites l'utiliser.

Reply

Marsh Posté le 14-09-2009 à 14:49:46    

merci beaucoup

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed