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 :

Difficultés de transmission d'un fichier gz


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Par défaut Difficultés de transmission d'un fichier gz
    Bonjour,

    J'aurais besoin de vos lumières car malgré des recherches poussées, je ne trouve pas de solution à mon problème.

    Je cherche à transmettre un fichier giz (.txt.gz) par une jsp.

    Voilà ce que j'ai déjà essayé (j'ai supprimé tout le code qui n'a rien a voir avec le problème) :

    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
     
    response.setContentType("application/binary");
    response.setHeader("Content-Disposition","inline; filename=test.txt.gz;");
     
    // Sortie
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
     
    // Fichier binaire un .txt.gz
    InputStream in = connection.getInputStream();
     
    // Traitement
    FileOutputStream outFile = new FileOutputStream(new File("C:\\binOutFile.txt.gz"));
    byte buffer[] = new byte[4096];
    int read = 0;
    do {
    // Lecture du flux d’entrée
    read = in.read(buffer);
    	if(read != -1) {
    		bout.write(buffer, 0, read);
     
    		// Ecriture locale pour le test
    	      outFile.write(buffer, 0, read);
    	}
    } while(read != -1);
     
    // Fermeture de mon fichier test
    outFile.close();
     
    // Envoi du résultat de la lecture.
    out.print(bout.toString());
    Dans ce code, j'essaie de faire la transmission mais elle ne fonctionne pas alors que mon test de copie en local fonctionne parfaitement. Je dis qu'elle ne fonctionne pas car le fichier test.txt.gz que je télécharge est plus gros que binOutFile.txt.gz et il n'est pas reconnu comme fichier gz. J'en déduis donc que la lecture est bonne et que le problème se situe au niveau de bout.toString() mais je ne vois pas comment faire autrement.

    Quelqu'un pourrait-il m'aider ???

    D'avance merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu ne dois pas utiliser toString() !!!
    Tu transformes un fichier binaire en une chaine de caractères (en utilisant l'encodage par défaut), ce qui te donne du n'importe quoi !!!!


    Il faut écrire les données binaires directement dans la réponse !

    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
    		response.setContentType("application/binary");
    		response.setHeader("Content-Disposition","inline; filename=test.txt.gz;");
     
    		// Fichier binaire un .txt.gz
    		InputStream in = connection.getInputStream();
    		try {
    			byte buffer[] = new byte[4096];
    			int read = 0;
     
    			while ( (read=in.read(buffer)) >=0 ) {
    				out.write(buffer, 0, read);
    			}
    		} finally {
    			in.close();
    		}
    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Par défaut
    Merci de ta réponse adiGuba,

    J'avais pensé à ce genre de chose mais mon objet out (l'objet out par défaut de la jsp) ne possède pas de méthode write().

    Peux-tu m'expliquer si tu le redéfinis ou ce que tu fais pour pouvoir y accéder ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Il faudrait plutôt faire cela dans une Servlet : une JSP est faite pour produire du texte...

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Par défaut
    Bonjour,

    J'ai finalement trouvé une solution à mon problème sans réécrire complètement une servlet.

    Tout au début de la jsp, je change le contentType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page contentType="application/binary"%>
    Ensuite, j'écris directement sur le outputstream (sans utiliser le out standard qui passe par un PrintWriter qui transforme en String) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OutputStream output = response.getOutputStream();
    Voilà, si ça peut aider...

    Encore merci adiGuba pour ton aide, tu m'as mis sur la bonne voie !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transmission d'un fichier en ftp mais en mode binary
    Par megamario dans le forum VB.NET
    Réponses: 17
    Dernier message: 13/03/2014, 15h02
  2. Transmission d'un fichier (serveur --> client)
    Par Atharendil dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/01/2008, 13h23
  3. Difficulte de recuperation du nom d'un fichier plat source
    Par ninsekh dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 26/09/2007, 23h46
  4. [XML] [PHP] Difficultés pour lire un fichier XML
    Par moutyk dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 30/11/2006, 13h14
  5. Transmission de données au fichier
    Par supertatane dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2006, 16h36

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