[Servlet][JQuery] renvoyer un zip/fichier vers le client
Hello,
je soumet mon formulaire côté client comme ceci :
Code:
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
| //callback handler for form submit
$("form[name=formCartoDonnees]").submit(function(e)
{
var postData = $(this).serializeArray();
var formURL = $(this).attr("action");
$("#recapContainer").append("<div id=loading> </div>")
$("#loading").css("width",$("#recapContainer").css("width"));
$("#loading").css("height",parseInt($("#recapContainer").css("height")+5));
$.ajax(
{
url : formURL,
type: "POST",
data : postData,
success:function(data, textStatus, jqXHR)
{
//data: return data from server
$("#loading").hide();
//window.open(data);
},
error: function(jqXHR, textStatus, errorThrown)
{
//if fails
}
});
e.preventDefault(); //STOP default action
}); |
Côté servlet :
Code:
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
| LOGGER.info(request.getParameter("dateDebut"));
LOGGER.info(request.getParameter("dateFin"));
LOGGER.info(request.getParameter("typeRecherche"));
LOGGER.info(request.getParameter("typeDownload"));
String typeGeneration = request.getParameter("typeDownload");
String strDateFin = request.getParameter("dateFin");
String strDateDebut = request.getParameter("dateDebut");
String valeurs = request.getParameter("listeValeurs");
String[] listeValeurs = valeurs.split(",");
// lancement generation
Cartographie carto = new Cartographie();
String nomZipSortie = carto.executer(typeGeneration, strDateDebut, strDateFin, listeValeurs, request.getParameter("typeRecherche"));
File file = new File(nomZipSortie);
// construction de la reponse a partir du zip
if(file.exists()){
byte[] buf = new byte[1024];
response.setContentType("application/zip");
response.setHeader("Cache-Control", "cache");
response.setHeader("Pragma", "cache");
response.setHeader("Content-disposition",
"attachment;filename=\"" + nomZipSortie.replaceAll("sortie/", "") + "\"");
response.setContentLength((int) file.length());
FileInputStream in = new FileInputStream(nomZipSortie);
OutputStream out = response.getOutputStream();
int count = 0;
while ((count = in.read(buf)) >= 0) {
out.write(buf, 0, count);
}
in.close();
out.close();
} |
Ce que je souhaite c'est que lorsque je soumet mon form, avoir mon image "loading" le temps du traitemet côté serveur puis une fois fini, on cache le loading et on affiche la fenetre de téléchargement de mon zip.
C'est possible de faire ça?
EDIT:
mon but étant, su mon ihm, je soumet mon form, j'ai un zouli loader, et une fois que mon fichier a été généré côté servlet et renvoyé coté client, je cache le loader et j'affiche la popup de téléchargement.
Car actuellement, lorsque je soumet mon form, la servlet génère un fichier zip et le renvoie, mais j'ai pas de loader, donc si mon traitement dure longtemps, niveau ergonomie, pas top.
Mais à priori d'après ce que j'ai vu , c'est pas faisable en ajax.