Bonjour à tous.
Je m'excuse d'avance pour ce topic qui reprend un thème maintes fois abodé, mais mes recherches s'avèrent infructueuses, je n'arrive pas à appliquer les solutions proposées à mon cas
Je travaille actuellement sur un module d'upload de fichier en java depuis une interface web (pages JSP).
Je précise que mon problème n'apparait que lorsque le nom du fichier contient des caractères spéciaux.
Voici le mécanisme d'upload : mon choisit un fichier dans un champ input de formulaire type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<form name="uploadRapport" action='/sis/servlet/UploadRapportASE' enctype='multipart/form-data' method='post' target="cibleChargement" onSubmit="return startStatusCheck()">
la target est une iframe invisible pour que l'on reste sur la même page lors de l'upload :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
<!-- iframe utilisée pour le chargement -->
<iframe id='cibleChargement' name='cibleChargement' src='' style='display: none'></iframe>
la servlet sur mon tomcat contient 3 méthodes : une qui se charge de gérer l'upload en lui-même, une qui se charge de télécharger le fichier, et une qui affiche le lien de téléchargement lorsque l'upload est terminé.
Le code du lien d'upload :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
sortie = response.getWriter();
...
ret = "<input type=\"hidden\" name=\"fileName\" value=\""+fileName+"\">" +
						"<a id='idNomRapport' onClick=\"javascript:$('getRapportForm').submit();\">"+fileName+"</a>" ;
...
sortie.println(ret);
la fonction javascript appelée depuis le onClick appelle la servlet en "mode téléchargement" (elle active un autre formulaire ayant même action, mais passant un paramètre qui fait passer le thread cette fois-ci dans la méthode de téléchargement)
Le principe de l'upload est le suivant :
j'utilise les librairies suivantes :
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;*
pour récupérer le fichier transmis par le formulaire, puis
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
pour le déposer sur un répertoire par ftp
Le module fonctionne à merveille, les fichiers sont déposés, on peut les récupérer...Tant que les noms des fichiers ne contiennent pas d'accent ou autres caractères spéciaux !
J'ai essayé d'utilisé une méthode avec le charset, mais je ne choisis peut-être pas la bonne méthode ou le bon encodage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Charset charset = Charset.forName("iso-8859-1");
			    	CharsetDecoder decoder = charset.newDecoder();
			        CharsetEncoder encoder = charset.newEncoder();
			    	if(encoder.canEncode(fileName)){
			    		ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(fileName));
			    		CharBuffer cbuf = decoder.decode(bbuf);
			    		fileName = cbuf.toString();
			    	}
			    	ftp.storeFile(fileName, data);
J'utilise l'encodage suivant car l'entête de mon document html (page jsp qui contient le formulaire d'upload et le lien de téléchargement du fichier uploadé) est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
mais le lien de téléchargement contient des caractères bizarres, donc le nom du fichier transmis en paramètre à ma servlet est forcément invalide, du coup le téléchargement échoue !
Voilà voilà, je reste évidemment à votre disposition pour toute demande d'infos complémentaires dans le but de solutionner ce problème !
Cordialement,
Raphaël