Bonjour,

J'aimerais proposer une fonctionnalité de sélection de fichier, puis après validation, de générer un zip de ces fichiers, et de proposer cela directement en téléchargement, de façon automatique, cad, sans que l'internaute n'ait à cliquer sur un lien. Le fichier ne doit pas non plus être stocké (mis à part en mémoire, le tps que l'utilisateur le télécharge.

En gros, le but est donc:

1. selection
2. Fenêtre du navigateur (ouvrir ou telecharger)

Actuellement, le zip généré est enregistré sur le DD du serveur. le script est ainsi:
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
 
// Création du tampon pour les buffers d’entrée et de sortie 
            	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 du flux d’écriture vers le fichier
            	FileOutputStream dest = new FileOutputStream(GlobalConst.PATH_APPLI + File.separator + GlobalConst.REP_ZIP + File.separator + fichier +".zip");
 
            	// Création d’un buffer de sortie afin d’améliorer les perf d’écriture
            	BufferedOutputStream buff = new BufferedOutputStream(dest);
 
            	// Création d’un 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 d’entré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 d’entrée et de sortie
            		int count;
            		while((count = buffi.read(data, 0, BUFFER)) != -1) {
            			out.write(data, 0, count);
            		}
 
            		//Fermeture de l’entrée en cours
            		out.closeEntry();
            		//Fermeture des flux
            		buffi.close();
            	}
 
            	out.close();


J'ai créé une page JSP comprenant ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
<%
    response.setContentType("application/zip");
    response.setHeader("Content-Disposition", "attachment; filename=monfichier.zip");
 %>
Cela a pour action que le navigateur me propose bien de télécharger ce fichier.
Mon seul problème est: comment faire en sorte que "monfichier.zip" pointe vers le flux, (vers le "fichier") sans que celui-ci ne soit enregistré....
De plus, pour supprimer l'enregistrement du fichier, j'ai pensé supprimer le FileOutPutStream pour le remplacer par un OutPutStream, mais je me heurte tjs à un problème à un moment ou à un autre, alors je me dit que je ne suis peut être pas sur la bonne voie....

J'ai trouvé pas mal d'éléments, notamment sur les PDF, mais je n'ai pour le moment, soit pas bien saisi la chose, soit pas trouvé ce qui me correspondait, soit pas bien compris...

Je sais que je ne suis pas loin...
Merci d'avance de votre aide