Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1726 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  créer un fichier zip et le télécharger

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

créer un fichier zip et le télécharger

n°2223057
Sbarney
Posté le 25-03-2014 à 10:28:54  profilanswer
 

Bonjour,
J'ai créé un bouton qui permet de créer un fichier zip., La fonction qui compresse le fichier fonctionne correctement ( quand je la test en console), mais quand je l'appelle via le bouton (dans le fichier JS), il se bloque et il donne une page blanche (je crois que je ne gère pas  le flux de sortie) auriez vous une idée svp  ?
Merci d'avance.

 

voici le code:
 

Code :
  1. public ZipOutputStream zipIt(String zipFile){
  2.      //String sReturn = "sReturnb_KO";
  3.      byte[] buffer = new byte[1024];
  4.      ZipOutputStream op = null;
  5.      ZipOutputStream zos = null;
  6.      try{
  7.      FileOutputStream fos = new FileOutputStream(zipFile);
  8.      zos = new ZipOutputStream(fos);
  9.      System.out.println("Output to Zip : " + zipFile);
  10.      for(String file : this.fileList){
  11.       System.out.println("File Added : " + file);
  12.       ZipEntry ze= new ZipEntry(file);
  13.          zos.putNextEntry(ze);
  14.          FileInputStream in =
  15.                        new FileInputStream(SOURCE_FOLDER + File.separator + file);
  16.          System.out.println("FileInputStream : "+SOURCE_FOLDER + File.separator + file);
  17.          int len;
  18.          while ((len = in.read(buffer)) > 0) {
  19.           zos.write(buffer, 0, len);
  20.          }
  21.          in.close();
  22.      }
  23.      zos.closeEntry();
  24.    
  25.      zos.close();
  26.      //sReturn = "sReturnb_OK";
  27.      System.out.println("Done" );
  28.    
  29.    
  30.     }catch(IOException ex){
  31.        ex.printStackTrace(); 
  32.     }
  33.      return zos;
  34.    }


Message édité par Sbarney le 25-03-2014 à 10:29:40
mood
Publicité
Posté le 25-03-2014 à 10:28:54  profilanswer
 

n°2223074
Devil'sTig​er
Posté le 25-03-2014 à 13:34:06  profilanswer
 

en faisant un flush de ton stream sortant ?

n°2223106
Bidem
Posté le 25-03-2014 à 17:31:20  profilanswer
 

J'imagine que ta méthode zipIt est lancée par une servlet.
 
Ton ZipOutputStream écrit dans un fichier donc il faut que ta servlet lise ce fichier et écrive les données dans la réponse.
 
Une autre façon de faire, serait de mettre l'OutputStream de la response en parametre de la méthode zipIt et d'écrire directement dedans (en plus ça évite de créer un fichier intermédiaire inutile)

n°2223175
Sbarney
Posté le 26-03-2014 à 11:18:44  profilanswer
 

@bidem
oui justement, il faut lire ce fichier et écrire ensuite les données dans la réponse et c'est là que je trouve le problème  :fou:  :fou:  
je trouve pas une fonction pour écrire dans la fichier telle la fonction write() qui prend en paramètre un objet de type OutputStream !!
et je peux pas non plus passer en paramètre un objet de type OutputStream  car je suis entrain de zipper un répertoire et j'utilise des fonctions de la classe ZipOutputStream qui ne seront donc pas accessible depuis ce paramètre !!

n°2223179
Bidem
Posté le 26-03-2014 à 12:12:05  profilanswer
 

Récupération de l'OutputStream (response est le paramètre HttpServletResponse de ta méthode doGet) :

Code :
  1. OutputStream out = response.getOutputStream();
 

Dans zipIt, tu peux remplacer le FileOutputStream (fos) par out.

 
Code :
  1. public ZipOutputStream zipIt(OutputStream out) {
  2.     //String sReturn = "sReturnb_KO";
  3.     byte[] buffer = new byte[1024];
  4.     ZipOutputStream zos = null;
  5.     try{
  6.       // branchement du ZipOutputStream sur out
  7.       zos = new ZipOutputStream(out);
  8.       for(String file : this.fileList){
  9.         System.out.println("File Added : " + file);
  10.         ZipEntry ze= new ZipEntry(file);
  11.         zos.putNextEntry(ze);
  12.         FileInputStream in =
  13.             new FileInputStream(SOURCE_FOLDER + File.separator + file);
  14.         System.out.println("FileInputStream : "+SOURCE_FOLDER + File.separator + file);
  15.         int len;
  16.         while ((len = in.read(buffer)) > 0) {
  17.           zos.write(buffer, 0, len);
  18.         }
  19.         in.close();
  20.       }
  21.       zos.closeEntry();
  22.       zos.close();
  23.       //sReturn = "sReturnb_OK";
  24.       System.out.println("Done" );
  25.     }catch(IOException ex){
  26.       ex.printStackTrace();
  27.     } finally {
  28.       // fermeture du flux
  29.       if (zos != null) {
  30.         try {
  31.           zos.flush();
  32.           zos.close();
  33.         } catch (IOException e) {
  34.           e.printStackTrace();
  35.         }
  36.       }
  37.     }
  38.     return zos;
  39.   }
 

NB : j'ai aussi ajouté la fermeture du flux dans le bloc finally


Message édité par Bidem le 26-03-2014 à 12:15:05
n°2223187
Sbarney
Posté le 26-03-2014 à 13:02:03  profilanswer
 

je te remercie bidem !
par contre je pense que tu as oublié d'enlever "zos.close();" qui au dessus (ligne 29)
je teste ça et je te redis :)


Message édité par Sbarney le 26-03-2014 à 13:02:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  créer un fichier zip et le télécharger

 

Sujets relatifs
[JAXB] Générer un Schema XSD à partir d'un fichier XMLQuelle solution pour créer une base de données ?
Besoin d'une personne pour me créer une page accès membre.Lire données pas à pas dans un fichier et stocker dans variables
[FORTRAN] Gestion sauts de ligne Windows/Linux dans fichier txt (1/2o)Script pour recevoir message et fichier
générer un fichier json avec java[FORTRAN] Lecture d'un fichier:problème récupération en-tête +mesures
Créer une page web html avec zone pour laisser un commantaire[HTML/JS] Créer et télécharger un fichier CSV avec ie
Plus de sujets relatifs à : créer un fichier zip et le télécharger


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR