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 :

Envoi de fichier au client depuis une servlet


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Envoi de fichier au client depuis une servlet
    Bonjour,

    Je me suis renseigné sur la faq J2EE de developpez.com sur la manière d'envoyer un fichier du serveur vers le client au moyen d'une servlet...

    J'ai donc testé le code tel qu'il l'est donné dans la faq. L'envoi de fichier fonctionne à merveille avec Opera et Firefox mais lorsque j'essaie avec Internet Explorer 6 le message suivant apparaît:

    Internet Explorer ne peut télécharger fichier.xml de 192.168.1.66

    Internet Explorer n'a pas pu ouvrir ce site Internet. Le site requis n'est pas disponible ou n'a pas pu être trouvé. Réessayez ultérieurement


    Quelqu'un a-t-il une idée de l'origine de cette erreur qui survient uniquement avec IE

    Voici mon code. Le chemin complet du fichier est passé en paramètre:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    	if (request.getParameter("filename") != null)
    	{
    		String filename = request.getParameter("filename") ;
    	        response.setContentType("application/download"); 
    	        response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 
     
     
    	        ServletOutputStream out = response.getOutputStream(); 
    	        File file = null; 
    	        BufferedInputStream from = null; 
    	        try 
    	        { 
    	          file = new File(filename); 
    	          response.setContentLength((int) file.length()); 
    	          int bufferSize = 64 * 1024; 
    	          long time = System.currentTimeMillis(); 
     
    	          try { 
    	            from = new BufferedInputStream(new FileInputStream(file), bufferSize * 2); 
    	            byte[] bufferFile = new byte[bufferSize]; 
    	            for (int i = 0; ; i++) 
    	            { 
    	              int len = from.read(bufferFile); 
    	              if (len < 0) 
    	                break; 
    	              out.write(bufferFile, 0, len); 
    	            } 
    	            out.flush(); 
    	          } finally { 
    	            try { from.close(); } catch (Exception e) { } 
    	            try { out.close(); } catch (Exception e)  {} 
    	          } 
    	          time = (System.currentTimeMillis() - time) / 1000; // seconds download 
    	          double kb = (file.length() * 1.0 / 1024); 
     
    	          if (file != null) 
    	            file.delete(); 
    	        }   catch (Exception e)   { 
     
    	          return; 
    	        } finally { 
    	          try {   file.delete();}   catch (Exception ex) {} 
    	        }	
    	}

  2. #2
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037
    Par défaut
    A tout hasard, t'es sûr du mime type application/download ? Jette un oeil pour voir s'il ne pose pas de pb à IE...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    D'après ce que j'ai lui le fait d'indiquer un mime type non standard (tel que application/download ou application/x-download) force certains navigateurs à afficher une boîte de dialogue permettant de télécharger le fichier au lieu de l'afficher ou de l'interpréter lui-même (si le fichier comporte une extention html ou xml par exemple).

    J'ai réessayé en remplaçant le mime type application/download par un mime type standard, en l'occurence application/xml, mais ie ne parvient toujours pas à télécharger le fichier. Par contre Windows affiche un avertissement de sécurité cette fois...

  4. #4
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037
    Par défaut
    Ok mais à mon avis c'est plus une histoire de "application/..." qui va déclencher le popup d'enregistrement, qu'un truc incertain comme ".../download" que le navigateur ne reconnaîtra pas. Enfin, je suis pas très sûr.

    Est-ce que tu as beaucoup de fichiers de différents types à gérer?

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2

  6. #6
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037
    Par défaut
    Euh ce n'est pas de l'upload ego...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Laurent.B
    Est-ce que tu as beaucoup de fichiers de différents types à gérer?
    Dans l'idéal ça devrait fonctionner avec tous types de fichiers, même si pour l'instant je pourrai me contenter de ne gérer que des fichiers xml.

  8. #8
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 037
    Points
    17 037
    Par défaut
    Bien mais dans un premier temps, est-ce que par exemple le mime type application/xml ne fonctionne pas comme tu veux ?
    ...
    à moins que ce ne soit une une histoire de Content-Disposition soit en 'attachment' soit en 'inline', à tester

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Le mime type application/xml provoque la même erreur.

    J'ai essayé avec Content-Disposition en inline et là le fichier s'affiche correctement mais sous la forme d'un arbre xml dans une fenêtre d'Internet explorer pour autant que le Content-Type soit application/xml (ou text/xml)

  10. #10
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Bonjour,

    Tout dabord je vois comme un problème dans ton script (fonctionnellement c'est bizarre en tout cas).

    Tu essais de récupérer un Fichier sur le serveur en le creant new File(...), puis a la fin tu effaces physiquement ce fichier. Du coup si tu essais de faire la manip plusieurs fois il ne retrouve forcement plus ton fichier (mais c'est p-e voulu).

    Ensuite, j'ai testé sur tous les navigateurs et effectivement :

    D'un coté tu as le ContentType qui correspond au format de sortie du flux et de l'autre tu as le Header qui définie comment doit etre transmit et aussi recu ce flux.

    Donc si tu essais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    response.setContentType("application/x-download");
    response.setHeader("Content-Disposition", "attachment;filename=\"test.xml\"");
    D'un coté, il doit forcer le telechargement "attachment" ok pour les nav type Opéra, Firefox.
    De l'autre tu mets x-download pour faire croire a IE que le fichier n'est pas comprehensible.

    Par contre, le fait de mettre test.xml dans le filename va te dire dans quel type de format (.xml -> ton appli désigner pour lire du xml) tu vas sauvegarder le fichier.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par yolepro
    Tu essais de récupérer un Fichier sur le serveur en le creant new File(...), puis a la fin tu effaces physiquement ce fichier. Du coup si tu essais de faire la manip plusieurs fois il ne retrouve forcement plus ton fichier (mais c'est p-e voulu).
    En effet, il s'agit d'une mauvaise adaptation du code à mon cas. Le fait de supprimer le fichier m'empêchait de le télécharger une seconde fois, mais ce n'est pas la cause du problème avec IE.

    Citation Envoyé par yolepro
    Par contre, le fait de mettre test.xml dans le filename va te dire dans quel type de format (.xml -> ton appli désigner pour lire du xml) tu vas sauvegarder le fichier.
    Ce qui revient au même puisque ma variable filename contient dans tous les cas un nom de fichier dont l'extension est .xml

  12. #12
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Tu as testé mon code (dans un premier temps avec le nom de fichier en dur : test.xml)?

    Cela fonctionne?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Oui j'ai quand même testé ton code mais ça ne fonctionne pas J'ai toujours le même message d'erreur avec IE

    ça fonctionne chez toi?

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/12/2010, 11h32
  2. Comment charger un fichier depuis une Servlet
    Par g25452 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 22/08/2008, 13h50
  3. Réponses: 1
    Dernier message: 27/12/2007, 09h18
  4. Réponses: 2
    Dernier message: 16/11/2006, 12h21
  5. Réponses: 2
    Dernier message: 16/11/2006, 10h55

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