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 :

upload de fichier


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2004
    Messages : 156
    Par défaut upload de fichier
    Bon je cherche une bonne documentation pour gérer l'upload de fichier dans une application jsp/servlet
    Tout ce que j'ai pu trouver n'étais pas très clair, incomplet ou qui ne fonctionne pas
    Et pour ce sujet google n'est pas moi ami (upload+jsp, upload+java ...), et rien de bien concluant

  2. #2
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2004
    Messages : 156
    Par défaut
    Bon apparemment il y a une librairie pour gérer l'upload de fichier, il s'agit de FileUpload
    http://jakarta.apache.org/commons/fileupload/

    Maintenant j'aimerais bien trouver des exemples ou de la documentations sur son fonctionnement

  3. #3
    Membre confirmé
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2004
    Messages : 156
    Par défaut
    Bon j'ai voulu créer un bout de 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
    36
    37
    38
    public void uploadFile(HttpServletRequest request, HttpServletResponse response) {
    	response.setContentType("text/html");
    	String fileName=null;
    	long sizeInBytes=0;
     
    	try { 
    		// Check that we have a file upload request
    		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    		if(isMultipart) {
    			// 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 items = upload.parseRequest(request);
    			// Process the uploaded items
    			Iterator iter = (Iterator) items.iterator();
    			while (iter.hasNext()) {
    				/* fetch an item from the iterator above */
    				FileItem item = (FileItem) iter.next();
    				if (!item.isFormField()) {
    					/* retrives name of the file uploaded from the client machine */ 
    					fileName = item.getName(); 
    					/* retrives size in byte of the file uploaded from the client machine */ 
    					sizeInBytes = item.getSize(); 
    					/* Create a new file on server machine */
    					File uploadedFile = new File("C:\\test.txt"); 
    					/* following statement writes to uploadedFile in single stroke */ 
    					try {
    						item.write(uploadedFile);
    					} catch (Exception e) {e.printStackTrace();} 
    					/* job done ! */
    				}
    			}
    			System.out.println("success ......"+fileName+"... "+sizeInBytes+" uploaded...... ");
    		} else System.out.println("NOT a multipart content....... ");
    	} catch(FileUploadException e){System.out.println(e.getMessage());}
    }
    Mais j'ai l'erreur suivante qui apparait et je vois pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    exception
     
    javax.servlet.ServletException: L'exécution de la servlet a lancé une exception
     
    cause mère
     
    java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List;
    	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:116)
    	com.dmpi.servlet.soins.Xml.uploadFile(Xml.java:58)
    	com.dmpi.servlet.soins.Xml.doAction(Xml.java:36)
    	com.dmpi.outil.ParentServlet.doGet(ParentServlet.java:27)
    	com.dmpi.outil.ParentServlet.doPost(ParentServlet.java:51)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Par défaut
    J'ai aussi galéré donc:
    1 - installe le commons-fileupload-1.2-src.zip dans le rep WEB-INF/lib
    2 - pour la jsp, le champs file doit se trouver dans un formulaire qui ne contiendra que ce champs et ses attributs. L'attribut enctype="multipart/form-data" apparemment inhibe le paramètre getParametter qui retourne systématiquement '' (traitement de classe imbriquée)
    3 - le fichier sera chargé dans le repertoire c:\tmp s'il n'existe pas le créer

    Pour ma part j'ai utilisé le code suivant qui est tiré de la doc http://www.javaatwork.com/java-uploa...amplecode.html

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    package librairie;
     
    import java.io.File;
    import java.util.Iterator;
    import java.util.List;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
     
    /**
     * Class for storing the uploaded files.
     */
     
    public class Import_fich_txt {
     
      /**
        * The base upload directory. In this directory all uploaded files will
        * be stored. With the applet param tag 'directory' you can create a
        * subdirectory for a user. 
        * See http://www.javaatwork.com/parameters.html#directory for more 
        * information about the 'directory' param tag. For a Windows environment 
        * the BASE_DIRECTORY can be e.g. * 'c:/temp' for Linux environment '/tmp'.
        */
     
      private static final String BASE_DIRECTORY = "/tmp";
     
      public static void main(HttpSession session,HttpServletRequest request){ 
     
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
     
        // vérification multipart requête
        if (isMultipart) {
     
          //  Create a factory for disk-based file items
          FileItemFactory factory = new DiskFileItemFactory();
     
          //  Create a new file upload handler
          ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
     
          // Set upload parameters
          // See Apache Commons FileUpload for more information
          // http://jakarta.apache.org/commons/fileupload/using.html
          servletFileUpload.setSizeMax(-1);
     
          try {
            String directory = "";
            // Parse the request
            List items = servletFileUpload.parseRequest(request);
            // Process the uploaded items
            Iterator iter = items.iterator();
     
            while (iter.hasNext()) {
              FileItem item = (FileItem) iter.next();
              // the param tag directory is sent as a request parameter to
              // the server
              // check if the upload directory is available
              if (item.isFormField())
              	{String name = item.getFieldName();
              	 System.out.println("- "+item.getString()+item.getFieldName());
              	 //System.out.println("- "+request.getAttribute("option"));
                 if(name.equalsIgnoreCase("directory"))
                	{directory = item.getString();}
                 // retrieve the files
              	}
              else
              	{// nommage du fichier
            	 //System.out.println(item.getString());  //affiche le fichier
            	  String fileName = item.getName();
            	  File file = new File(fileName);
            	  file = new File(BASE_DIRECTORY, file.getName());
                 //enregistremen dans /tmp/ si non vide
                 if(item.getInputStream().read()>-1)
                	 {item.write(file);
                	  session.setAttribute("file", file.getPath());}
              }
            }
     
          } catch (Exception e) {
            e.printStackTrace();
    //        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
          }
    //      response.setStatus(HttpServletResponse.SC_OK);
        } else {
    //      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
        }
      }
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 130
    Par défaut
    J'ai le meme code que toi mais toujours la meme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List;
    	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
    	com.cmsspring.document.controller.TexteAddFormController.onSubmit(TexteAddFormController.java:66)
    	org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)
    	org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:250)
    	org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:857)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:475)
    	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:440)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    voici le code de mon controlleur
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    protected ModelAndView onSubmit(HttpServletRequest request, 
    			HttpServletResponse response, Object command, BindException errors) throws Exception {
     
    		logger.info("Entering controller");
    		Texte texte = (Texte)command;
    		texte.setTaille(1);
    		texte.setId(1);
    		//recupération du fichier 
     
    		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    		if(!isMultipart){
    			System.out.println("pas multipart");
     
    		}
     
     
    //		 Create a factory for disk-based file items
    		FileItemFactory factory = new DiskFileItemFactory();
     
    //		 Create a new file upload handler
    		ServletFileUpload upload = new ServletFileUpload(factory);
    		 // Set upload parameters
    	      // See Apache Commons FileUpload for more information
    	      // http://jakarta.apache.org/commons/fileupload/using.html
    	      upload.setSizeMax(-1);
     
    	      try {
    	          String directory = "";
    	          // Parse the request
    	          List items = upload.parseRequest(request);
    	          // Process the uploaded items
    	          Iterator iter = items.iterator();
     
    	          while (iter.hasNext()) {
    	            FileItem item = (FileItem) iter.next();
    	            // the param tag directory is sent as a request parameter to
    	            // the server
    	            // check if the upload directory is available
    	            if (item.isFormField())
    	            	{String name = item.getFieldName();
    	            	 System.out.println("- "+item.getString()+item.getFieldName());
    	            	 //System.out.println("- "+request.getAttribute("option"));
    	               if(name.equalsIgnoreCase("directory"))
    	              	{directory = item.getString();}
    	               // retrieve the files
    	            	}
    	            else
    	            	{// nommage du fichier
    	          	 //System.out.println(item.getString());  //affiche le fichier
    	          	  String fileName = item.getName();
    	          	  File file = new File(fileName);
    	          	  file = new File(BASE_DIRECTORY, file.getName());
    	               //enregistremen dans /tmp/ si non vide
    	               if(item.getInputStream().read()>-1)
    	              	 {item.write(file);
    	              	  session.setAttribute("file", file.getPath());}
    	            }
    	          }
     
    	        } catch (Exception e) {
    	          e.printStackTrace();
    //	          response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    	        }
    		// fin recuperation
     
    		logger.info("Received : File Texte " + texte.getTitre() + " ");
    		//texteService.saveTexte(texte);
    		logger.info("Returning from UserAddFormController view to " + getSuccessView());
    		return new ModelAndView(new RedirectView(getSuccessView()));
    	}
    l'erreur est sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     List items = upload.parseRequest(request);
    je ne comprend pas pourquoi?
    je suis dans un classe java.
    quelqu'un a une idée

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 12
    Par défaut
    Tu es sur d'avoir "commons-fileupload-1.0.jar" dans WEB-INF/lib ?

    Si oui, télécharge à nouveau la librairie !

  7. #7
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 54
    Par défaut
    pour récupérer le nom ou répertoire de ton fichier d'une jsp vers une servlet
    tu fais :
    dans JSP :
    <input type="file" name="fichier" value="toto">

    dans servlet :
    String fic = request.getParameter("fichier");

Discussions similaires

  1. [FTP] Problème pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/01/2008, 22h21
  2. Upload de fichier par XMLHTTP
    Par Immobilis dans le forum ASP
    Réponses: 6
    Dernier message: 21/01/2005, 17h02
  3. upload de fichier
    Par 120 dans le forum ASP
    Réponses: 16
    Dernier message: 21/06/2004, 12h07
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    Réponses: 4
    Dernier message: 03/06/2004, 12h44

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