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

Flex Discussion :

Télécharger un fichier généré par une servlet Java


Sujet :

Flex

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut Télécharger un fichier généré par une servlet Java
    Bonjour

    Je souhaite télécharger un fichier créé par un serveur Java avec mon application Flex.

    Mon code Flex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    	<mx:Script>
    		<![CDATA[		
    			private function downloadResultFile():void {
    				var fr:FileReference = new FileReference();
    				var ur:URLRequest = new URLRequest("http://localhost:9090/monAppli/getResult");
    				fr.download(ur, "result.csv");
    			}
    		]]>
    	</mx:Script>
     
    <mx:Button id="dlResult" label="Download result file" click="downloadResultFile()" />

    Concernant la Servlet, j'utilise Spring MVC. Une Servlet centrale managée par Spring dispatche les requêtes sur divers controllers en fonction de l'URL. Le code du controller mappé sur l'URL getResult est le suivant :
    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
     
    public class MonController extends AbstractController {
     
    	@Override
    	protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		System.out.println("Requete recue pour download");
    		File file = new File("test.csv");
    		System.out.println("file path = " + file.getAbsolutePath());
    		List<String> lines = new ArrayList<String>();
    		lines.add("dede;dede;dedede");
    		FileUtils.writeLines(file, lines);
     
     
    		this.putFileInResponse(response, file);
    		return null;
    	}
     
    	private void putFileInResponse(final HttpServletResponse response, final File file) throws IOException {
    		response.setContentLength((int) file.length());
    		final FileInputStream fis = new FileInputStream(file);
    		final OutputStream os = response.getOutputStream();
    		byte[] fileContent = new byte[4096];
    		int r = 0;
    		while (r >= 0) {
    			r = fis.read(fileContent);
    			os.write(fileContent);
    		}
    		fis.close();
    		os.flush();
    		os.close();
    	}
     
    }
    Mon problème :
    Lorsque je clique sur le bouton "Download result file" sur ma GUI Flex, une boîte de dialogue s'ouvre et me propose de sélectionner un emplacement pour sauvegarder mon fichier qui sera téléchargé. je sélectionne un emplacement puis clique sur OK. Et là rien ne sa passe ! Mon controller server side n'est pas appelé. Il semblerait qu'aucune requête ne parte vers l'appli JEE.

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Salut,

    as tu lancé ton appli en mode debug(plugin Flash debugger), car je vois que tu effectues tes tests en local et je soupçonne le classique problème de security sand-box

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    Pour apporter de l'eau au moulin, j'ai ajouté des listeners sur les évènements du FileReference. De plus j'ai déclaré la variable pointant sur le FileReference en dehors de la méthode au cas où il y ait des problèmes de portée sur ce processus asynchrone (Garder vivant mon FileReference après l'exécution de la méthode). Ci-dessous le nouveau code Flex :

    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
     
    private var fileRef:FileReference;
     
    private function downloadResultFile():void {
        fileRef = new FileReference();
        fileRef.addEventListener(Event.CANCEL, doEvent);
        fileRef.addEventListener(Event.COMPLETE, doEvent);
        fileRef.addEventListener(Event.OPEN, doEvent);
        fileRef.addEventListener(Event.SELECT, doEvent);
        fileRef.addEventListener(HTTPStatusEvent.HTTP_STATUS, doEvent);
        fileRef.addEventListener(IOErrorEvent.IO_ERROR, doEvent);
        fileRef.addEventListener(ProgressEvent.PROGRESS, doEvent);
        fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, doEvent);
     
        var urlReq:URLRequest = new URLRequest("http://localhost:9090/monAppli/getResult");
        fileRef.download(urlReq, "result.csv");
    }
     
    private function doEvent(evt:Event):void {
        var fr:FileReference = evt.currentTarget as FileReference;
        Alert.show("event type = " + evt.type);
    }
    Voici le comportement :
    Je clique sur le bouton download. J'utilise la boîte de dialogue pour sélectionner un emplacement. Je clique sur le bouton save de la boîte de dialogue. La boîte de dialogue disparaît. Un message donné pat le Alert.show indique : "event type = cancel" !?!? Pourquoi donc ?! J'ai pas cliqué sur Cancel mais bien sur Save.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    Merci pour la réponse Jim_Nastiq

    J'utilise FlexBuilder pour Flex 3.

    Dans le cadre de mon problème :
    Mon appli JEE tourne sur un Tomcat en localhost. L'appli Flex est lancée depuis FlexBuilder : clic droit / Run as / Flex Application.
    Cela ouvre un browser avec la GUI Flex. C'est ainsi que je teste ...

    Comment lancer mon appli Flex en mode debbug ? Quel est ce problème de sécurité ? Comment le résoudre ?

    Merci d'avance.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    Lorsque j'essaie de lancer l'appli Flex en "Debug As" j'obtiens la fenêtre de dialogue en pièce jointe.
    Images attachées Images attachées  

  6. #6
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    oui il te faut donc installer le plugin flash debugger qui correspond au browser que tu utilises (y'a meme le lien dans le message sur la boite de dialogue

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Points : 68
    Points
    68
    Par défaut
    Bon ça me gonfle. Le plugin téléchargé refuse de s'installer correctement. Mais après m'être documenté sur ce problème de security sandbox, j'ai eu l'idée de lancer avec Firefox plutôt que IE. Et là ça marche nickel !!!

    Mon plugin Flash pour IE doit être merdique et j'ai la flemme de le réinstaller. Je vais faire avec Firefox.

    Merci encore Jim_Nastiq.

    Par contre, juste une petite inquiétude. Quand je vais déployer l'appli en prod, les utilisateurs utilisant IE auront-ils le problème ?

  8. #8
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    nous n'avons pas le moyen de savoir, toi oui

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2014, 12h36
  2. Réponses: 2
    Dernier message: 17/05/2011, 20h20
  3. Télécharger un fichier généré par l'application
    Par laurent.c123 dans le forum JSF
    Réponses: 1
    Dernier message: 15/11/2007, 12h11
  4. Lire des fichiers à envoyer par une servlet
    Par loic911 dans le forum Langage
    Réponses: 1
    Dernier message: 30/04/2007, 17h31
  5. [Tomcat]Droit d'accès aux fichiers créés par une servlet
    Par loulouleboss dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 15/07/2004, 15h32

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