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

Développement Web en Java Discussion :

Pb d'upload de fichiers si ajout d'autres champs dans le formulaire


Sujet :

Développement Web en Java

  1. #1
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut Pb d'upload de fichiers si ajout d'autres champs dans le formulaire
    Bonjour.
    j'ai créé un petit site web avec jsp et servlets (j'utilise Java8 et Tomcat7). Ayant besoin d'uploader des fichiers via un formulaire, j'ai suivi les différents exemples sur le web en utilisant les librairies fournies par apache.commons : fileupload et io. Ça fonctionne tout à fait bien, mes fichiers sont uploadés dans un répertoire dédié et j'insère le nom des fichiers dans une base MariaDB.
    Le problème arrive lorsque je veux récupérer autre chose que le nom du fichier en provenance du formulaire. Par exemple, un titre ou une description de ce fichier (un input et un textarea) pour l'insérer en bdd et pouvoir le récupérer plus tard.
    Je tourne sur le pb depuis une journée, mais je n'ai pas trouvé comment utiliser d'autres champs (au moins "text") que ceux de type "file" dans un un formulaire avec enctype="multipart/form-data".

    Code simplifié du formulaire dans la jsp, il y a aussi du Bootstrap :
    Code html : 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
     
    ...
    <main>
    	<div class="row">
    		<div class="col">
    			<form method="post" action="ajout_photo" enctype="multipart/form-data">
    				<div class="mb-3">
    					<label for="title" class="form-label">Nom</label> <input
    						type="text" id="title" name="title" class="form-control">
    				</div>
    				<div class="mb-3">
    					<label for="photo" class="form-label">Choisir une photo</label> <input
    						type="file" id="photo" name="photo" class="form-control">
    				</div>
    		</div>
    	</div>
    	<div class="row">
    		<div class="col">
    			<button type="submit" class="btn btn-primary">Valider</button>
    			</form>
    		</div>
    		<div class="col">
    			<a class="btn btn-primary" href="ajout_photo" role="button">Annuler</a>
    		</div>
    	</div>
    </main>
    ...

    Une fonction uploadFile() est appelé dans le doPost() de la servlet correspondante.

    Au sein de cette fonction, je récupère les items du formulaire de la façon suivante :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    // ...
    DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
    ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
    try {
    	List<FileItem> items = (List<FileItem>) uploadHandler.parseRequest(request);
    	Iterator<FileItem> itr = (Iterator<FileItem>) items.iterator();
    	while (itr.hasNext()) {
    		try {
    			FileItem item = (FileItem) itr.next();
    			System.out.println("fieldname : " + item.getFieldName());
    			System.out.println("name : " + item.getName());
    // ...
    item.write(file);
    // ...

    item.write(file) fait bien l'upload du fichier dans le bon répertoire.
    J'obtiens bien les deux fieldnames (title et photo), en revanche, si getName() fournit bien le nom du fichier, impossible d'obtenir la valeur de title.
    J'ai bien conscience que "title" n'est pas un type "file" mais "text".

    J'ai bien essayé de récupérer cette valeur dans la servlet par un request.getParameter("title"); mais ça fait planter le uploadHandler.parseRequest(request) au sein de la fonction d'upload ...

    Bref, y-a t'il un moyen d'obtenir la valeur de title fournie par le Post du formulaire ?

    Yves.
    Participez vous aussi !
    Message utile
    Discussion résolue

  2. #2
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 595
    Points : 879
    Points
    879
    Par défaut
    Bonsoir.
    Avec plus de 900 visites en moins de 24 heures, mais sans aucune réponse, je suis un peu perplexe sur la faisabilité de mixer champ "file" et champ "text" dans un même formulaire.
    Ne pouvant résoudre seul ce problème, je l'ai contourné de la façon suivante :
    1. J'ai créé un premier formulaire qui ne contient que le champ "file" pour uploader mon fichier dans un répertoire dédié .
    2. Puis, si l'upload fonctionne, je bascule automatiquement sur un second formulaire grâce auquel je rentre autant de champs "text" que je le souhaite.
    3. finalement, ayant conservé le nom du fichier grâce à une variable de session, j'insère tous les champs dans la base de données.


    Voilà, voilà ...
    Participez vous aussi !
    Message utile
    Discussion résolue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2013, 17h39
  2. Ajouter + supprimer - des champs dans un formulaire
    Par tmedtcom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/05/2012, 11h20
  3. [1.x] EmbedForm et ajout dynamique de champ dans une formulaire.
    Par Noobboy dans le forum Symfony
    Réponses: 6
    Dernier message: 10/08/2011, 16h03
  4. Réponses: 1
    Dernier message: 04/07/2011, 22h35
  5. Ajout dynamique de champ dans un formulaire
    Par gendalf37400 dans le forum Ruby on Rails
    Réponses: 5
    Dernier message: 06/06/2007, 16h11

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