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

  FORUM HardWare.fr
  Programmation
  Java

  Servlet : faire un download d'un fichier zip

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Servlet : faire un download d'un fichier zip

n°2108356
Barnabe42
Posté le 27-10-2011 à 13:14:05  profilanswer
 

Bonjour,
 
J'ai un fichier zip sur mon ddur, quand je clique sur l'icone telecharger du navigateur, je veux que ce fichier se télécharge.
Alors, le fichier sur le ddur est nickel. Mais alors quand je le telecharge, ça fait n'importe nawak : zip impossible a ouvrir, taille plus volumineuse...(pourquoi ?)
Voici mon code que j'ai trituré à maintes reprises, mais impossible d'avoir le bon code qui fait une copie de ce fichier (toto.zip sur le dur -> servlet -> téléchargement ; le fichier devrait rester identique :/) :
 

Code :
  1. //update zip file entry
  2.  File lF = new File( lSimuleaZipFilename );
  3.  HttpServletResponse httpResponse = PortalUtil
  4.    .getHttpServletResponse( pResponse );
  5.  httpResponse.setContentLength( (int) lF.length() );
  6.  httpResponse.setHeader( "Content-Disposition",
  7.    "attachment; filename=\"" + SIMULATOR_ZIP_FILENAME + "\"" );
  8.  httpResponse.setHeader( "Content-Transfer-Encoding", "binary" );
  9.  httpResponse.setContentType( "application/octet-stream" );
  10.  Writer out = httpResponse.getWriter();
  11.  FileInputStream lFis = new FileInputStream( lF );
  12.  DataInputStream in = new DataInputStream( lFis );
  13.  int data;
  14.  byte[] buffer = new byte[4096];
  15.  int bytesRead;
  16.  while ((bytesRead = in.read( buffer )) != -1)
  17.  {
  18.   out.write( new String( buffer ), 0, bytesRead );
  19.   buffer = new byte[4096];
  20.  }
  21.  in.close();
  22.  out.flush();
  23.  out.close();


 
Y-a-t-il un loup kkpart ?  :heink:


Message édité par Barnabe42 le 27-10-2011 à 13:14:59
mood
Publicité
Posté le 27-10-2011 à 13:14:05  profilanswer
 

n°2108742
Hangleton
Posté le 30-10-2011 à 08:42:17  profilanswer
 

Peut-être ici:
 

Code :
  1. out.write( new String( buffer ), 0, bytesRead );


 
Quel encoding est utilisé sur le serveur ?

n°2112782
Bidem
Posté le 22-11-2011 à 14:45:38  profilanswer
 

Tu utilises un Writer pour transmettre des données binaires, c'est sur que ça ne va pas marcher.

 

Pour transmettre des données binaires dans ta réponse, tu dois utiliser l'OutputStream fourni par ton objet httpResponse.

Message cité 1 fois
Message édité par Bidem le 22-11-2011 à 14:46:12
n°2112886
Barnabe42
Posté le 23-11-2011 à 09:54:42  profilanswer
 

Bidem a écrit :

Tu utilises un Writer pour transmettre des données binaires, c'est sur que ça ne va pas marcher.
 
Pour transmettre des données binaires dans ta réponse, tu dois utiliser l'OutputStream fourni par ton objet httpResponse.


 
 
Très bien, merci pour ta réponse, tu m'apprends quelque chose ... après 5 ans d'XP en java [:joce]
 
Le code qui marche :
 

Code :
  1. //update zip file entry
  2.  File lF = new File( lSimuleaZipFilename );
  3.  HttpServletResponse httpResponse = PortalUtil
  4.    .getHttpServletResponse( pResponse );
  5.  httpResponse.setContentLength( (int) lF.length() );
  6.  httpResponse.setHeader( "Content-Disposition",
  7.    "attachment; filename=\"" + lZipOutputFilename + "\"" );
  8.  httpResponse.setHeader( "Content-Transfer-Encoding", "binary" );
  9.  httpResponse.setContentType( "application/octet-stream" );
  10.  httpResponse.flushBuffer();
  11.  OutputStream out = httpResponse.getOutputStream();
  12.  FileInputStream lFis = new FileInputStream( lF );
  13.  DataInputStream in = new DataInputStream( lFis );
  14.  byte[] buffer = new byte[4096];
  15.  int bytesRead;
  16.  while ((bytesRead = in.read( buffer )) != -1)
  17.  {
  18.   out.write( buffer, 0, bytesRead );
  19.   buffer = new byte[4096];
  20.  }
  21.  in.close();
  22.  out.flush();
  23.  out.close();


Message édité par Barnabe42 le 23-11-2011 à 09:56:08

---------------
Asus Z87-A, Core i7 4790K@Stock, G.Skill 4x8Go 2800MHz CL12, Nvidia GTX 980@1178/1752, Asus PB287Q 4K@60Hz | CPU-Z validator | Post image
n°2223053
Sbarney
Posté le 25-03-2014 à 10:18:37  profilanswer
 

Bonjour,
j'essaie de faire la même chose mais je n'y arrive toujours pas !! pourriez vous m'aider svp ?
voici mon code :


Message édité par Sbarney le 25-03-2014 à 10:19:31
n°2223054
Sbarney
Posté le 25-03-2014 à 10:20:35  profilanswer
 

Bonjour,
j'essaie de faire la même chose mais je n'y arrive toujours pas !! pourriez vous m'aider svp ?
voici mon 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.    }


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

  Servlet : faire un download d'un fichier zip

 

Sujets relatifs
Exclure toute les extensions de fichier sauf uneLire dans un fichier puis associer une variable à chaque ligne
(fichier mui)Comment éditer les messages du jeu dame de pique Windows?[bash] [Windows] traitement a partir de nom de fichier
[PHP] Ouvrir un fichier sur un serveur distant[VBS] ouverture boite de dialogue selection fichier win7
Comment contrôler le nom du fichier uploadétransformation du fichier XML vers TEX avec XSLT
Tester l'existence d'un fichier[Servlet] download de fichier
Plus de sujets relatifs à : Servlet : faire un download d'un fichier zip


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