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 :

JSP : comment uploader un fichier du client vers le serveur? [Débutant(e)]


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut JSP : comment uploader un fichier du client vers le serveur?
    Bonjour,

    Quelqu'un pourrait-il me dire comment, en JSP, uploader un fichier depuis le poste du client et le stocker sur le serveur?

    Merci

  2. #2
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    La question a été posée de multiple fois sur ce forum!

    En faisant une recherche sur le forum developpement WEB en Java avec les mots clefs : upload file.

    Tu devrais trouver une réponse!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Oui, en effet.
    J'ai trouvé un bout de code que j'ai essayé d'adapter à ma situation mais j'ai toujours un souci.
    Pourrais-tu m'aider à disgnostiquer le souci dans mon fichier Crea01.jsp dont le code est le suivant? (sachant que j'ai copié dans mon WEB-INF/lib toutes les librairie nécessaires notamment la commons-fileupload-1.1.1.jar)

    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
    <%@page language="java" contentType="text/html; charset=iso-8859-1" import="java.sql.*,javax.servlet.http.*,java.lang.*,java.util.*"%>
    <%@ page import="org.apache.commons.fileupload.*" %>
    <%@ page import="org.apache.commons.fileupload.DiskFileUpload" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.io.File" %>
    <%@ page import="java.util.Iterator" %>
    <%
    boolean isMultipart = FileUpload.isMultipartContent(request);
    if(!isMultipart){			
    request.setAttribute("msg", "Request was not multipart!");
    request.getRequestDispatcher("msg.jsp").forward(request, response);
    return;
    }
    
    DiskFileUpload upload = new DiskFileUpload();
    List items = upload.parseRequest(request);
    Iterator itr = items.iterator();
    
    while(itr.hasNext()){
    FileItem item = (FileItem) itr.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());
    	File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName());
    	item.write(savedFile);
    }
    }		
    %>
    <html>
    <head><title>Test upload Fichier</title></head>
    <body>
    <form name="myForm" action="Crea01.jsp" method="post" enctype="multipart/form-data">
    Nom <input type="text" name="mom"/><br/>
    Photo <input type="file" name="photo"/>
    <input type="submit" value="valider">
    </form>
    </body>
    </html>
    Ainsi, lorsque je clique sur le bouton "valider", au lieu d'obtenir une copie (de la photo sélectionnée) dans le répertoire tmp , le programme passe toujours dans la partie :
    if(!isMultipart){
    request.setAttribute("msg", "Request was not multipart!");
    request.getRequestDispatcher("msg.jsp").forward(request, response);
    return;
    }

    Merci d'avance

  4. #4
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je pense que 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
     
    boolean isMultipart = FileUpload.isMultipartContent(request);
    if(!isMultipart){			
    request.setAttribute("msg", "Request was not multipart!");
    request.getRequestDispatcher("msg.jsp").forward(request, response);
    return;
    }
     
    DiskFileUpload upload = new DiskFileUpload();
    List items = upload.parseRequest(request);
    Iterator itr = items.iterator();
     
    while(itr.hasNext()){
    FileItem item = (FileItem) itr.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());
    	File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName());
    	item.write(savedFile);
    }
    }		
    %>
    Devrait se trouver dans la servlet qui receptionnera la validation de ton formulaire.
    N'oublie pas que le code est executé coté serveur!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  5. #5
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Justement, et comment dois-je faire pour obtenir que ce code se trouve dans la servlet qui receptionnera la validation de mon formulaire?

    Que dois-je mettre dans ma page Crea01.jsp?

    Merci

  6. #6
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Il faut que le bout de code soit dans la méthode do*** (post ou get) de la servlet déclarée dans l'attribut action de ton formulaire.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  7. #7
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Bonjour,
    Je n'arrive pas à comprendre quand tu parles de méthode doPost ou doGet de la servlet déclarée dans action. En effet dans le "action", j'ai le même fichier "Crea01.jsp" (le submit doit me renvoyer vers la même page). Et puis, je ne sais pas comment je peux définir une méthode dans un fichier .jsp

    Merci

  8. #8
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    voila un petit schema qui devrait t'aider à comprendre :

    crea01.jsp ----> servlet permettant de faire les traitements ---> crea01.jsp.

    La première flêche represente le submit de ton formulaire, la deuxième représente la redirection apres traitement des données envoyées par ton formulaire.

    Je pense qu'avant d'aller plus loin, tu devrais (re)lire les principes liés aux servlets et au jsp. Bien faire la différence entre les deux et bien comprendre leur champ d'application.
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  9. #9
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Points : 47
    Points
    47
    Par défaut
    Re salut et excuse-moi vraiment pour le dérangement récurrent...

    Je suis tout à fait d'accord avec toi par rapport au schéma :

    crea01.jsp ----> servlet permettant de faire les traitements ---> crea01.jsp

    Par contre quand tu me dis que 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
    boolean isMultipart = FileUpload.isMultipartContent(request);
    if(!isMultipart){			
    request.setAttribute("msg", "Request was not multipart!");
    request.getRequestDispatcher("msg.jsp").forward(request, response);
    return;
    }
     
    DiskFileUpload upload = new DiskFileUpload();
    List items = upload.parseRequest(request);
    Iterator itr = items.iterator();
     
    while(itr.hasNext()){
    FileItem item = (FileItem) itr.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());
    	File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName());
    	item.write(savedFile);
    }
    }		
    %>
    doit se trouver dans la méthode doPost de ma servlet, je me demande comment écrire un code dans cette servlet!!
    D'après ma compréhension des jsp/servlet, le principe est que les pages .jsp sont compilées en des servlets côté serveur, lesquelles servlets renvoient du code HTML à afficher par le navigateur du client.

    N'est-ce pas?

    Merci

  10. #10
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je suis d'accord une fois compilé une JSP est traduit en servlet.
    Mais il ne faut pas voir les choses de cette manière là.

    Dans l'implémentation d'une application n tier. Il faut raisonner selon le modele MVC (Model View Controler).

    Les JSPs étant dédiées à la partie vue et les servlets à la partie controler.
    La partie vue correspond à l'affiche (evidement ) : la mise en forme des données pour la présentation au l'utilisateur.
    La partie controleur permet de traiter les données renvoyées par la vue et en fonction de cela d'appeler les services nécessaire à la réalisation de la demande utilisateur. une fois ces traitements effectuer le controleur renvoie le resultat à la partie vue qui se chargera de faire la mise en forme.

    J'espere que tu comprendras mieux le différence maintenant.
    Dans mon explication ci dessus j'ai pris quelques raccourcis. Je te recommande d'approfondir le sujet.

    Après ce bref rappel : le code Java fait partie du controleur (donc de la servlet) il recupere ce qui est envoyé par ta jsp .
    L'implémentation que tu as fait dans ta JSP ne pourra jamais fonctionner.

    J'espere que cela t'aidera, si tu as des questions n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


Discussions similaires

  1. envoyer un fichier du client vers le serveur
    Par ysahel dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 27/05/2009, 22h07
  2. comment uploader un fichier vers le serveur ftp ?
    Par octal2007 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/01/2008, 21h39
  3. comment envoyer un fichier d'un client vers un serveur
    Par nad30 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/05/2007, 13h55
  4. Réponses: 8
    Dernier message: 22/05/2007, 12h38
  5. Réponses: 2
    Dernier message: 22/06/2006, 12h09

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