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 55 56 57 58 59 60 61 62 63 64 65
| public ActionForward getZip(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm l_form = (DynaActionForm)form;
response.setContentType("application/zip");
//response.setHeader("Content-Disposition", "attachment; filename=ddd.pdf");
List l_nomPhotos = new ArrayList();
final int BUFFER = 2048;
byte data[] = new byte[BUFFER];
// Création aléatoire du nom de l'archive....
Random rnd = new Random( );
String fichier = String.valueOf(rnd.nextLong());
// Création/récupération du flux décriture vers le fichier
OutputStream dest = response.getOutputStream();
// Création dun buffer de sortie afin daméliorer les perf décriture
BufferedOutputStream buff = new BufferedOutputStream(dest);
// Création dun flux décriture Zip vers ce fichier à travers le buffer
ZipOutputStream out = new ZipOutputStream(buff);
// On donne la méthode de compression désirée (ici DEFLATE), et le tx de compression (on n'aura que des images, donc peu de compression
out.setMethod(ZipOutputStream.DEFLATED);
out.setLevel(5);
// Les fichiers à compresser...
for(int i=0; i<l_nomPhotos.size(); i++) {
FileInputStream fi = new FileInputStream(GlobalConst.PATH_APPLI + File.separator + GlobalConst.REP_PHOTO + File.separator +l_nomPhotos.get(i));
//Création de leur buffer dentrée
BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
// Création d'une entrée zip pour chacun
ZipEntry entry = new ZipEntry(l_nomPhotos.get(i).toString());
// Affectation de cette entrée au flux zip de sortie
out.putNextEntry(entry);
//Écriture des entrées dans le flux de sortie par paquet de taille égale aux tampons dentrée et de sortie
int count;
while((count = buffi.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
//Fermeture de lentrée en cours
out.closeEntry();
//Fermeture des flux
buffi.close();
}
out.close();
// Calculer le flux à renvoyer au client
byte[] bytes = out.toString().getBytes();
// Envoyer le flux dans la réponse
OutputStream os = response.getOutputStream();
os.write(bytes);
os.close();
// Retourne null pour dire à Struts de ne rien faire
return null;
} |
Partager