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] [FileUpload] Upload de fichiers via un formulaire


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Points : 56
    Points
    56
    Par défaut [Servlet] [FileUpload] Upload de fichiers via un formulaire
    Bonjour, je cherche à uploader un fichier via un formulaire, j'utilise la derniere version de Tomcat et mon ide c'est eclipse.

    J'ai un formulaire basique pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form  enctype="multipart/form-data" action="Ajout.do" method="post"><br>
    <input type="file" name="infile"><br>
    <input type="submit" name="submit" value="Continue"><br>
    </form><br>
    J'ai chercher plusieurs documentation et je comprends pas trop le fonctionement de l'api Jakarta
    J'ai vu un message du forum qui expliquait bien le fonctionement mais malheuresement je n'ai pas tout compris...

    J'ai plusieurs questions, la premiere pour le repertoire "temporaire" ou les fichiers vont être stocker, J'ai choisi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String yourTempDirectory = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\temp";
    Je suppose que tomcat a les droits d'écriture. Mais ne serais ce pas mieux de mettre un lien relatif? Dans ce cas quel est la postion courante de mon api j'ai
    http://localhost:8080/nomDuProjet/Ajout.jsp donc je serais dans
    "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\WEBAPPS\\nomduProjet" ?

    J'arrive pas a comprendre le fonctionement pour récupérer le champs file du formulaire.
    Donc voila le code que j'ai récupérer du post cité plus haut.

    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    // Create a new file upload handler
    		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory( );
     
    		ServletFileUpload upload = new ServletFileUpload( fileItemFactory );
     
    		// Set upload parameters
    		int yourMaxMemorySize = 512 * 1024 * 8; // en bytes
    		int yourMaxRequestSize = 1024 * 1024 * 8;
    		String yourTempDirectory = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\temp"; // un répertoire ou tomcat a le droit d'écrire
     
    		fileItemFactory.setSizeThreshold( yourMaxMemorySize );
     
    		// upload.setSizeThreshold(yourMaxMemorySize);
    		upload.setSizeMax( yourMaxRequestSize );
    		// upload.setRepositoryPath(yourTempDirectory);
     
    		// Parse the request -on recupère tous les champs du formulaire
    		List items;
    		try
    		{
    			items = upload.parseRequest(request);
     
    			// Process the uploaded items
    			Iterator iter = items.iterator( );
    			while ( iter.hasNext( ) )
    			{
    				System.out.println( "Ecriture directe" );
    				FileItem item = (FileItem) iter.next( );
     
    				// Process a regular form field
    				if ( item.isFormField( ) )
    				{
    					System.out.println( "IF" );
    					String name = item.getFieldName( );
    					String value = item.getString( );
     
    				}
    				// Process a file upload
    				else
    				{
    					System.out.println( "Else" );
    					String fieldName = item.getFieldName( );
    					String fileName = item.getName( );
    					String contentType = item.getContentType( );
    					boolean isInMemory = item.isInMemory( );
    					long sizeInBytes = item.getSize( );
     
    					boolean writeToFile = true;
    					// Copie directe pour les petits fichiers, sinon streaming (le
    					// streaming ne marche pas)
    					if ( sizeInBytes > 512 * 1024 * 8 ) writeToFile = false;
     
    					// Process a file upload
    					if ( ( writeToFile ) & ( fieldName.equals( "source" ) ) )
    					{ // Ecriture directe
    						System.out.println( "Ecriture directe" );
    						File uploadedFile = new File( yourTempDirectory + fileName );
    						item.write( uploadedFile );
    					}
    					else
    					{ // Streaming
    						File uploadedFile = new File( yourTempDirectory + fileName ); // ou
    						// sinon un nouveau nom de fichier à la place de fileName
    						InputStream sourceFile;
    						try
    						{
    							sourceFile = item.getInputStream( );
    							OutputStream destinationFile;
    							try
    							{
    								destinationFile = new FileOutputStream( uploadedFile );
    								byte buffer[] = new byte[512 * 1024];
    								int nbLecture;
    								while ( ( nbLecture = sourceFile.read( buffer ) ) != -1 )
    								{
    									destinationFile.write( buffer, 0, nbLecture );
    								}
    								sourceFile.close( );
    							}
    							catch ( Exception ee )
    							{
    								// TODO Auto-generated catch block
    								ee.printStackTrace( );
    							}
     
    						}
    						catch ( IOException ie )
    						{
    							// TODO Auto-generated catch block
    							ie.printStackTrace( );
    						}
    					}
     
    				}
    			}
    		}
     
    		catch ( Exception e )
    		{
    			// TODO Auto-generated catch block
    			e.printStackTrace( );
    		}
    Donc voila mon problème maintenant c'est que ça ne fonctionne pas (on ne sans douterai pas ) mais j'aimerais surtout comprendre comment ça fonctionne . Ah oui j'ai aussi vu le champ dans le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enctype="multipart/form-data"
    je me demandais à quoi ca servait, à ce que j'ai compris c'est pour récupérer le champ file, et la methode doit forcément être post. enfin c'est encore obscur dans mes pensées...
    merci !

  2. #2
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour

    juste une question
    pourquoi tu n'utilises pas les exemples du site de apache au lieu de reprendre un code d'un forum ?

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

    dans ce lien tu as toutes les étapes nécessaires. je te conseille de commencer par ça

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Points : 56
    Points
    56
    Par défaut
    Tout simplement parce que j'arrive pas a le faire fonctionner. Je pense que je récupère pas correctement le champ input file du formulaire. C'est un peu le boui boui dans ma tête ...

  4. #4
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Essaies avec

    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
     
    FileItemFactory factory = new DiskFileItemFactory();
     
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
     
    // Parse the request
    List <FileItem> items = upload.parseRequest(request);
     
    // Process the uploaded items
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
      if (!item.isFormField()) {
            String fieldName = item.getFieldName();
             String fileName = item.getName();
             if (fileName != null) {
               filename = FilenameUtils.getName(filename);
             }
     
            File uploadedFile = new File("/path/to/file");
            item.write(uploadedFile);
      }
    }
    tu ne devrais pas être loin de quelque chose qui fonctionne

    par contre il faut que tu geres les cas d'erreurs et les eventuelles exceptions

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Points : 56
    Points
    56
    Par défaut
    Salut merci pour ta réponse, pour le chemin du fichier je dois mettre un lien relatif ? Ou une c:// fonctionne ?

  6. #6
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Salut
    je te conseille de mettre un chemin absolu pour commencer

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Salut,
    Je n'arrive pas à uploader un fichier via formulaire.

    La ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List <FileItem> items = upload.parseRequest(request);
    "bloque la suite". Je dois peut etre avoir un soucis via mon formulaire qui est pourtant basique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form name="firstForm" action="fichier.do" method="post" 
                 style="width:50%;margin:auto;background-color:#c1d9fc;padding-bottom:15px;">
     
    		<div style="text-align:center;">		
    			<h2 style="color:white;background-color:#6683b1;">Nouveau</h2>
    			<p> Choix du fichier : <input type="file" name="fichier">  </p>			
    			<p style="width:50%;margin:auto;"><input type="submit" name="Valider" value="Valider"/></p>
    		</div>
    	</form>
    J'espère que vous pourrez m'aider.

  8. #8
    Membre éprouvé Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour

    tu devrais ouvrir un post pour toi ..enfin je pense ...

    sinon je pense qu'il te manque dans la balise form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    enctype="multipart/form-data"
    sinon est-ce que tu as une erreur dans tes logs ?
    essayes d'être précis dans les messages que tu postes
    sinon ça va vraiment être difficile de t'aider

Discussions similaires

  1. [PHP 5.0] Comment uploader des fichiers via formulaire en PHP
    Par gringo75011 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2014, 08h27
  2. [PHP 5.0] Upload de fichier via un formulaire ayant plusieurs fieldsets
    Par nina.b dans le forum Langage
    Réponses: 8
    Dernier message: 11/09/2009, 12h10
  3. Upload de Fichier via une Servlet HTTP
    Par tagsOf dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 01/11/2008, 17h53
  4. Réponses: 4
    Dernier message: 22/02/2008, 12h43
  5. envoie de fichiers via les formulaires
    Par fabogranqi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 21h34

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