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, Tomcat] encodage de nom de fichier uploadé


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Points : 55
    Points
    55
    Par défaut [servlet, Tomcat] encodage de nom de fichier uploadé
    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

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je m'excuse de remonter un post un peu vieux, mais je me retrouve avec le même problème, et ça commence à m'énerver légèrement. J'utilise aussi les API commons-fileupload (v1.2) d'apache à travers spring-mvc (v1.2.9)

    Voici le topo :

    Mes pages HTML utilisent le charset ISO-8859-1 :

    Mon serveur de test utilise comme charset par défaut ISO-8859-1.
    -> Aucun problème pour récupérer le nom du fichier avec des caractères spéciaux.

    Par contre un des serveurs de prod utilise UTF-8 comme charset par défaut
    -> Impossible de récupérer le nom du fichier (avec caractères spéciaux) correctement.

    Quand je regarde la requête HTTP post envoyé par mon navigateur (Firefox) je ne vois pas l'encodage utilisé spécifié. Je me dis donc que soit je doit spécifier l'encodage par défaut des entête HTTP Post coté serveur, soit arriver à ce que le client spécifie lui même l'encodage qu'il utilise.
    Petite précision le fait de mettre request.setCharacterEncoding("ISO-8859-1") ne change rien.

    Voila si certains ont déjà eu ce problème ou ont une idée

    Cordialement,
    Nicolas

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    J'ai finalement résolu mon problème (mais pas celui de raphael, désolé) car en utilisant le framework spring-web (v1.2.9), j'utilise un multipart-resolver. Il suffit de spécifier le defaultEncoding dans le fichier spring-*-servlet.xml

    <bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="ISO-8859-1" />
    </bean>

Discussions similaires

  1. Encodage de nom de fichier sous Linux
    Par lad86 dans le forum Langage
    Réponses: 5
    Dernier message: 30/04/2012, 14h11
  2. Réponses: 4
    Dernier message: 02/08/2009, 16h21
  3. Problème d'encodage des noms de fichiers
    Par fort88 dans le forum Langage
    Réponses: 3
    Dernier message: 14/04/2009, 16h36
  4. [Zip] encodage des noms de fichiers
    Par xorax dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/01/2008, 02h17
  5. problème encodage des noms de fichiers
    Par kiopa'a dans le forum Général Python
    Réponses: 2
    Dernier message: 26/06/2007, 12h49

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