IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

[Servlet][JQuery] renvoyer un zip/fichier vers le client


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut [Servlet][JQuery] renvoyer un zip/fichier vers le client
    Hello,

    je soumet mon formulaire côté client comme ceci :

    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
    		//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>&nbsp;</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 : 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
    				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.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Par défaut
    Résolu en utilisant la librairie Jquery.fileDownload :

    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
    							// ouverture d'une popup de type "Loader" le temps de la generation du zip via Ajax
    						    $.fileDownload($("form").attr("action"), {
    						        preparingMessageHtml: "<img src='css/images/loading.gif' /> Génération de l'archive en cours ...",
    						        failMessageHtml: "Erreur",
    						        httpMethod: "POST",
    						        dialogOptions : { position: { my: "center", at: "center", of: $("#bilan") } ,modal: true, dialogClass: "loadingPopup"},
    						        data: $("form").serialize(),
    						        successCallback: function(){
     
    						        	$(".loadingPopup").hide();
    						        	$("#bilan").dialog("close");
     
    						        	$("input[name=dateDebut]").val("");
    						        	$("input[name=dateFin]").val("");
    						        	$("#listes input:checked").each( function(){
    						        		$(this).attr("checked",false);
    						        	});
    						        }
    						    });

    Et côté servlet :

    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
    				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");
    					// obligatoire - pour le plugin jquery.fileDownload
    					Cookie cook = new Cookie("fileDownload","true");
    					cook.setPath("/");
    					response.addCookie(cook);
    					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();
    				}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Applet qui envoie un fichier vers une servlet
    Par daophp dans le forum Applets
    Réponses: 0
    Dernier message: 06/12/2011, 09h01
  2. renvoyer un controle DataGridView vers un fichier excel
    Par vb.net.2008 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/08/2009, 14h20
  3. envoyer/recevoir fichier vers/depuis servlet
    Par Ikki dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 07/09/2008, 21h24
  4. [SERVLET] envoi de fichier vers IE
    Par attwad dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 07/08/2007, 11h53
  5. renvoyer la sortie standard vers un fichier
    Par batotoba dans le forum ANT
    Réponses: 1
    Dernier message: 05/09/2006, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo