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.
Partager