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

Services Web Java Discussion :

Récupération fichier ZIP


Sujet :

Services Web Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut Récupération fichier ZIP
    Bonjour,

    J'appelle une méthode d'un webservice et je récupère en retour un fichier de type byte[].
    Ce fichier est un .zip contenant un .xml mais je n'arrive pas à l'enregistrer en local.
    J'ai essayé de l'enregistrer avec un FileOutputStream mais le fichier zip obtenu est corrompu.

    Est ce que je dois utiliser des méthodes java zip? un buffer? Je ne sais pas trop vers quoi m'orienter..

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    On peux voire le code? Et pourrais-tu attacher ce que donne ta sauvegarde? tu ferme bien tes stream comme il faut?

    Enfin, tu peux aussi utiliser directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ZipInputStream(new ByteArrayInputStream(byte[]))
    si seul le contenu t'intéresse

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Merci de votre aide ;

    J'ai fait un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Appel du webservice pour récupérer fichier
    byte[] recep = stubrpc.statutDeclaration(numDepot);
     
    //Enregistrement du fichier reçu en local
    File file = new File("C:/recep.zip");   
    FileOutputStream foStream = new FileOutputStream(file);
    ByteArrayOutputStream destinationFile = new ByteArrayOutputStream(); 
    destinationFile.write(recep)
    /destinationFile.writeTo(foStream);
    Puis j'ai fermé les fichier et flux. Mais le fichier est corrompu.
    Ok pour utiliser un ZipInputStream mais comment je l'enregistre en local ensuite?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    tu peux poster le ficheir récupéré qu'on le vérifie? T'es sur à 100% que c'est un zip que tu recois du serveur?

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Je peux fournir ça oui. (le fichier xml est à 0 octets donc bon..)

    Et sinon la description du webservice indique bien:

    Paramètre de sortie : type byte[]
    "Fourni un fichier ZIP contenant le fichier XML qui regroupe l’état des déclarations qui ont été intégrées. Le fichier XML contenu dans le ZIP s’intitulera :RetourDmmo_(N°Depot).XML"
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    tu peux nous donner les code exact que tu utilise pour sauver le fichier (avec la fermeture des stream et tout?)

    compare aussi la taille du byte[] avec la taille du fichier

    On dirait vraiment un fichier qu'on a oublié de cloturer. Donc il manque les dernier bytes. D'ailleurs quand je décode, j'ai ça à la fin avant l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    </ANOMVT_CODE></ANOMVT><ANOMVT ANOMVT_NUMERO="21" ><ANOMVT_CODE>80</ANOMVT_CODE></ANOMVT><
    T'as bien du contenu, il est juste incomplet.

  7. #7
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Du coup j'ai essayé ça :

    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
     
     
           //Appel du webservice pour récupérer fichier
            byte[] recep = stubrpc.statutDeclaration(numDepot);
            int fileSize =recep.length;
     
           //Enregistrement du fichier reçu en local
     try { 
        File file = new File("C:/recep.zip");   
        FileOutputStream foStream = new FileOutputStream(file);
     
        try{
     
        ByteArrayOutputStream destinationFile = new ByteArrayOutputStream(); 
        ByteArrayInputStream sourceFile = new ByteArrayInputStream(recep);
     
        try{
        int nbLecture;
        byte buffer[]=new byte[512*1024]; 
     
     
    while( (nbLecture = sourceFile.read(buffer)) != -1 ) { 
    destinationFile.write(buffer, 0, nbLecture);
    destinationFile.writeTo(foStream);
    }
     
            }finally { destinationFile.close(); } 
        } finally { foStream.close(); } 
    } catch (IOException e) { 
    e.printStackTrace(); 
    }
    Mais je commence à me mélanger un peu..

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    oui je confirme, c'est le bordel et ça fait pas ce que vous pensez que ça fait (pour chaque "bloc" lu depuis l'array de byte, vous réécrivez l'intégralité en append dans votre fichier )
    Donc si vous lisez a,b,c, vous stockez dans le zip "aababc"

    Commencez par ceci, qu'on voie ce qui se passe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    byte[] recep = stubrpc.statutDeclaration(numDepot);
            int fileSize =recep.length;
     
           //Enregistrement du fichier reçu en local
     
        File file = new File("C:/recep.zip");   
        FileOutputStream foStream = new FileOutputStream(file);
     try { 
        fos.write(recep);
     } finally {
        fos.close();   
        System.out.println("stocké "+recep.length+" bytes");
     }

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Alors j'ai essayé ton code :
    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
     
            byte[] recep = stubrpc.statutDeclaration(numDepot);
            int fileSize =recep.length;
     
           //Enregistrement du fichier reçu en local
     
     
        File file = new File("C:/recep.zip");   
        FileOutputStream fos= new FileOutputStream(file);
     try { 
        fos.write(recep);
     } finally {
        fos.close();   
        System.out.println("stocké "+fileSize+" bytes");
     }
    J'obtiens en console "stocké 3386 bytes" et l'archive est toujours corrompue.
    Ne faudrait il pas écrire dans le fichier bytes par bytes jusqu'à fileSize?

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par nephen Voir le message

    J'obtiens en console "stocké 3386 bytes"
    Et le fichier sur le disque fait combien?

  11. #11
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Taille : 3,30 Ko (3*386 octets)!

    Donc j'ai la totalité du fichier...
    Sauf que j'ai toujours une erreur ! C:\recep.zip: Fin de l'archive non attendue.

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    conclusion, c'est stubrpc.statutDeclaration(numDepot); qui vous renvoie un contenu tronqué et qui est en tord, pas le code de sauvegarde.

  13. #13
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Bonjour,

    Question bête mais est ce que le problème ne viendrait pas du webservice qui n'écrirait tout simplement pas correctement le flux zip ?

  14. #14
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Et bien je vais donc voir avec le fournisseur du web service..

  15. #15
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    Je reviens vers vous concernant mon problème.
    Le fournisseur du web service m'assure que la méthode retourne bien un fichier zip complet.
    En fait, nous avons même fait le test avec une application cliente hors de mon entreprise et l'archive obtenue n'est pas corrompu.

    Auriez vous une idée de ce qui peut corrompre l'archive de mon coté? mon proxy?? qqchose d'autre??

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ben faites déjà un sniff de votre connexion pour saovir si vous avez ou pas tout.
    Après, je part du principe que c'est stubrpc.statutDeclaration(numDepot) qui fait n'importe quoi

  17. #17
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Mars 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2007
    Messages : 78
    Par défaut
    En fait si j'appelle statutDeclaration() avec un numDepot qui ne correspond à rien je reçois en retour un fichier zip contenant un fichier xml de 8 lignes (328 octets) qui indique en retour qu'il ne trouve rien de correspondant au numDepot transmis.

    Et la ce fichier zip n'est pas corrompu par contre...

  18. #18
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    il est difficile de perdre la fin d'un fichier qui tiens dans un seul bloc de données La corruption avec perte à la fin dépend de la taille du fichier.

Discussions similaires

  1. sh : Problème de récupération fichiers ZIP via FTP
    Par benthebest dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 24/11/2014, 18h56
  2. [Zip] Créer un fichier zip
    Par Mykeul dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 07/03/2005, 17h38
  3. Executer un fichier zip
    Par Sébastien THEVOT dans le forum C++Builder
    Réponses: 15
    Dernier message: 11/10/2004, 11h35
  4. Extraction d'un fichier zip
    Par dyason dans le forum Général Python
    Réponses: 2
    Dernier message: 13/07/2004, 13h35
  5. [Fichier Zip] Comment zipper un fichier
    Par caro_a dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 27/05/2004, 10h40

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