Bonjour,
Dans mon formulaire, il est autorisé d'uploader X fichiers tant qu'on ne dépasse pas une taille T .
Si T vaut 1 Mo, l'utilisateur peut uploader un fichier de 1 Mo ou 5 fichiers de 200 Ko ou 3 fichiers de 300 Ko ..
Afin de rendre ceci dynamique, j'avais pensé à un système : Sur les <input type="file"..> grâce à l'event "onChange" , j'appelais une servlet grâce à Window.opener.
Get - CheckFile.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <input type="file" name="file1" onChange="OpenPopup(/CheckFile?link=1','popupchoix','width=300,height=150,menubar=no,status=no');"/>
Je créais un nouveau form sur une page popup enfant, en initialisant le value du nouveau input file avec la même valeur que l'input de la page parent. Ensuite submit() qui renvoit vers la servlet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 getServletConfig().getServletContext(). getRequestDispatcher("html/checkFile.jsp").forward(request, response);
checkFile.jsp
La Servlet teste la taille du fichier et ensuite, sur la fenêtre parent, je peux autoriser ou non selon la taille restante, l'upload d'un nouveau fichier.
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 <html> <HEAD> <title> Upload de fichier </title> </HEAD> <body onblur="window.focus()"> <% if(request.getParameter("fileUploaded")==null) {%> <form action="/MCIC/WeiCheckFile" method="post" enctype="multipart/form-data" name="checkSizeForm"> <input type="file" name="myFile" id="myFile" value="c:\\file95_2010-06-18.jpg"/> <input type="submit" value="Valider"/> <SCRIPT language="javascript"> document.getElementById('myFile').value = window.opener.document.getElementById('file<%= request.getParameter("link")%>').value; document.checkSizeForm.submit(); </SCRIPT> </form> <% } else { %> LE FICHIER A ETE UPLOADE :) <SCRIPT language="javascript"> alert("voici : " + window.opener.document.getElementById("filesSize1".value); </SCRIPT> <% }%> </body> </html>
POST - CheckFile.java
Le problème est qu'on ne peut modifier la valeur d'un input de type file
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 String contentType = item.getContentType(); System.out.println("taille : " + taille +" contenu : " + contentType + " name : " + fileName); if((taille >0 && contentType.equalsIgnoreCase("application/octet-stream"))||contentType.equalsIgnoreCase("application/x-zip-compressed")) emptyFields+="Format du fichier " + fieldName+" non autorisé ou fichier ouvert"; if(!controller.checkFileSize(taille)) emptyFields+="La taille du fichier " + fieldName+" est trop grande"; } } //Redirect to the main JSP getServletConfig().getServletContext(). getRequestDispatcher("html/checkFile.jsp?fileUploaded=YES").forward(request, response);
Bien entendu, je ne peux pas utiliser AJAX, sinon ça serait plus facile..
Est-ce qu'une autre solution est envisageable ?
Merci d'avance.
Partager