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

Langage Java Discussion :

Problème de zip


Sujet :

Langage Java

  1. #1
    Membre actif Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Points : 228
    Points
    228
    Par défaut Problème de zip
    Bonjours,
    Mon programme fonctionne de la manière suivante : mon application java fait appel à une page php qui crée un fichier zip à partir de plusieurs fichiers et le retourne. Mon application récupère alors ce fichier, l'enregistre mais lorsque je souhaite l'ouvrir dans mon code java avec un "new ZipFile("test.zip");", cela provoque une erreur alors que je peux ouvrir mon fichier en dehors de java sans souci.

    (J'utilise la librairie HTTPClient...)

    Voici le code de mon application java :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import org.apache.commons.httpclient.*;
    import org.apache.commons.httpclient.methods.*;
    import org.apache.commons.httpclient.params.HttpMethodParams;
    import java.util.zip.*;
     
    import java.io.*;
     
    public class HTTPTest {
     
        private static String url = "http://128.1.2.11/test.php";
     
        public static void main(String[] args) {
    	// Create an instance of HttpClient
    	HttpClient client = new HttpClient();
     
    	// Create a method instance.
    	GetMethod method = new GetMethod(url);
     
    	// Provide custom retry handler is necessary
    	method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
    		new DefaultHttpMethodRetryHandler(3, false));
     
    	try {
    	    // Execute the method.
    	    int statusCode = client.executeMethod(method);
     
    	    if (statusCode != HttpStatus.SC_OK) {
    		System.err.println("Method failed: " + method.getStatusLine());
    	    }
     
    	    // Read the response body.
    	    InputStream responseBody = method.getResponseBodyAsStream();
     
    	    // Deal with the response.
    	    FileOutputStream writenFile = new FileOutputStream("test.zip");
    	    byte [] test = new byte[1024];
    	    while (responseBody.read(test) > 0) {
    		writenFile.write(test);
    	    }
     
    	    ZipFile zipfile = new ZipFile("test.zip");
     
    	} catch (HttpException e) {
    	    System.err.println("Fatal protocol violation: " + e.getMessage());
    	    e.printStackTrace();
    	} catch (IOException e) {
    	    System.err.println("Fatal transport error: " + e.getMessage());
    	    e.printStackTrace();
    	} finally {
    	    // Release the connection.
    	    method.releaseConnection();
    	}  
        }
    }
    Mon fichier test.php :
    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
    <?php
        // appel de la classe
        require_once('zip.lib.php');
        // nom des fichiers à ajouter dans l'archive
        $filename = 'test.sql';
        $filename2 = 'test.txt';
     
        // contenu du fichier
        $fp = fopen ($filename, 'r');
        $content = fread($fp, filesize($filename));
        fclose ($fp);
     
        // contenu du fichier
        $fp2 = fopen ($filename2, 'r');
        $content2 = fread($fp2, filesize($filename2));
        fclose ($fp2);
     
        // création d'un objet 'zipfile'
        $zip = new zipfile();
        // ajout des fichiers dans cet objet
        $zip->addfile($content, $filename);
        $zip->addfile($content2, $filename2);
        // production de l'archive' Zip
        $archive = $zip->file();
     
        // entêtes HTTP
        header('Content-Type: application/x-zip');
        // force le téléchargement
        header('Content-Disposition: inline; filename=archive.zip');
     
        // envoi du fichier au navigateur
        echo $archive;
    ?>
    Et mon erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fatal transport error: error in opening zip file
    java.util.zip.ZipException: error in opening zip file
    	at java.util.zip.ZipFile.open(Native Method)
    	at java.util.zip.ZipFile.<init>(Unknown Source)
    	at java.util.zip.ZipFile.<init>(Unknown Source)
    	at test.HTTPTest.main(HTTPTest.java:43)
    Quelqu'un saurait-il résoudre mon problème ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Tu peux essayer de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    writenFile.flush();
    writenFile.close();
    avant d'ouvrir le zip ?

  3. #3
    Membre actif Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Points : 228
    Points
    228
    Par défaut
    Oups j'avais pas fermé... Mais ça change pas grand chose malheureusement...

    Avec un fichier zip normal, il n'y a pas de problème...

    Sinon j'ai remarqué que si les fichiers à transférer étaient trop gros, le fichier zip créé est défectueux (mais pas si je le télécharge via un navigateur...).

    Donc mon problème doit venir de la récupération et l'écriture du fichier, mais où exactement...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2004
    Messages : 73
    Points : 85
    Points
    85
    Par défaut
    Ton fichier test.zip existe à l'endroit ou tu éxécutes ton code ??

  5. #5
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Ben vu qu'il le crée juste avant à priori oui ...

  6. #6
    Membre actif Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Points : 228
    Points
    228
    Par défaut
    Oui en toute logique il est crée.
    Si j'execute mon code sans recharger le fichier zip j'ai le même problème donc il doit être créé même si c'est pas correctement...

  7. #7
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Et tu dis que si tu l'exécutes et que tu t'arretes juste après l'écriture du fichier, le fichier n'est pas lisible non plus par un programme standard type winzip ?

  8. #8
    Membre actif Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Points : 228
    Points
    228
    Par défaut
    Bah ça dépend la taille du fichier, quand je met 2 petits fichiers, n'importe quel explorer d'archive est capable de le lire, mais sinon il me dit : Fin de l'archive non attendue.

    J'viens de testé en téléchargeant via un navigateur puis en essayant de l'ouvrir via java, et l'archive ne s'ouvre pas non plus

  9. #9
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Alors le souci doit venir du php ... et là je ne peux pas t'aider

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Je crois si mes souvenirs sont bons que tu peux compresser en GZ (compatible zip mais un seul fichier par archive) sans appeler de dll ou en BZ2 la il faut aller dans le php.ini et supprimer le ';' devant l'option bz2 (compatibilité ?)

  11. #11
    Membre actif Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Points : 228
    Points
    228
    Par défaut
    Non en fait le problème ne vient pas de php, je viens de retester avec un fichier zip récupéré du navigateur et il n'y a pas de soucis, j'avais du essayé après avoir (mal) modifier le fichier php.

    Donc j'ai un seul problème qui est de récupérer le fichier correctement à partir de java mais c'est pas gagné...

    *EDIT :
    Citation Envoyé par Vikisme
    Bah ça dépend la taille du fichier, quand je met 2 petits fichiers, n'importe quel explorer d'archive est capable de le lire, mais sinon il me dit : Fin de l'archive non attendue.
    Me suis trompé, ça dépend pas de la taille, mais du type de fichiers. Si je met des fichiers sql l'archive semble bien formée après (bien qu'elle ne marche pas dans l'application java), mais si je met un .jasper (ça ressemble à du XML) il me dit alors "Fin de l'archive non attendue"...

  12. #12
    Membre actif Avatar de Vikisme
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 172
    Points : 228
    Points
    228
    Par défaut
    Bah ça marche maintenant

    Voilà ce que j'ai fais, ça change pas beaucoup, j'avais déjà essayé un truc dans le genre mais sans succés, mais maintenant qu'ça marche je vais pas m'en plaindre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Read the response body.
    BufferedInputStream responseBody = new BufferedInputStream(method.getResponseBodyAsStream());
     
    // Lecture par segment de 0.5Mo 
    byte buffer[]=new byte[512*1024];
    int nbLecture;
     
    FileOutputStream writenFile = new FileOutputStream("test.zip");
    while( (nbLecture = responseBody.read(buffer)) != -1 ) {
        writenFile.write(buffer, 0, nbLecture);
    } 
    writenFile.flush();
    writenFile.close();
    responseBody.close();
    Merci à tous ceux qui se sont penché sur mon problème, surtout à toi chtig

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

Discussions similaires

  1. problème java + zip : décompression impossible
    Par Papipen dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 09/04/2015, 16h31
  2. problème création ZIP avec DotNetZip
    Par Lenn0x dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/11/2010, 21h58
  3. Bizarre de problème 7-zip sous Windows 7 Home Premium 64 bits
    Par annedeblois dans le forum Windows 7
    Réponses: 5
    Dernier message: 14/05/2010, 03h37
  4. Problème de Zip ! :/
    Par Sylver--- dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/06/2007, 12h38
  5. Problème compression zip
    Par Kara dans le forum Delphi
    Réponses: 2
    Dernier message: 19/07/2006, 10h22

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