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

Struts 1 Java Discussion :

[Struts]Action - Envoyer un flux de donnees au client


Sujet :

Struts 1 Java

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut [Struts]Action - Envoyer un flux de donnees au client
    Bonjour, je genere dans mon action struts un contenu csv a envoye au client sous forme de String.

    Je voudrais que lorsque ce contenu est envoye qu il ouvre une invite chez le client lui demandant simplement d ouvrir ou d enregistrer ce flux (sous forme de fichier csv)

  2. #2
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Regarde ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dans ton web.xml :
     
    <web-app>
      <mime-mapping>
        <extension>csv</extension>
        <mime-type>application/vnd.ms-excel</mime-type>
      </mime-mapping>
    </web-app>
    ou ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dans ton Action (enfin bon là où tu peux écrire la réponse) :
     
    response.setContentType("application/vnd.ms-excel");
       response.setHeader("Content-Disposition", "attachment; filename="monfichier.xls");

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par nuke_y
    Regarde ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dans ton Action (enfin bon là où tu peux écrire la réponse) :
     
    response.setContentType("application/vnd.ms-excel");
       response.setHeader("Content-Disposition", "attachment; filename="monfichier.xls");
    Merci mais le probleme c que je veux envoyer un flux et non un fichier, peut etre as tu une autre solution...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Peut etre que ceci te convient plus... ( Enfin ca reviens a envoyer le fichier... )
    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
     
          String fichier = genererFichier(fd); 
     
          response.setContentType("text/plain");        
          response.setHeader( 
                "Content-Disposition", 
                "attachment;filename=nomFichier.csv" 
          ); 
     
          try   { 
               OutputStream os = response.getOutputStream(); 
               InputStream is = new ByteArrayInputStream(fichier.getBytes()); 
               int count; 
               byte buf[] = new byte[4096]; 
               while ((count = is.read(buf)) > -1) 
                  os.write(buf, 0, count); 
               is.close(); 
               os.close(); 
          } 
          catch (Exception e) { 
             logger.log(Level.SEVERE, "Erreur :\n"+e); 
          }

  5. #5
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Vi vi, mon code se poursuit comme le tien desproges mais j'ai oublié de mettre la suite !

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Ben voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	            String fichier = (String)(CsvIOManager.getInstance().export(identiteVOAdapter, null));
    	            response.setContentType("text/plain");        
    	            response.setHeader("Content-Disposition", "attachment;filename=nomFichier.csv"); 
    			    OutputStream os = response.getOutputStream(); 
    			    InputStream is = new ByteArrayInputStream(fichier.getBytes()); 
    			    int count; 
    			    byte buf[] = new byte[4096]; 
    			    while ((count = is.read(buf)) > -1) 
    			        os.write(buf, 0, count); 
    			        is.close(); 
    			        os.close();                
    			    }
                	return null;
    Ca ne marche toujours pas, j ai une invite qui s ouvre et me demande d enregistrer le fichier CvsExport.do (nom de l action en cours) et lorsque je clic sur ouvrir ou enregistrer, j ai l erreur suivante:
    Internet Explorer n a pu telecharger CvsExport.do de localhost...


    PS. le probleme vient peut etre que je retourne null comme ActionForward apres le traitement??? Si vous avez une idee??

    Merci d avance

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Le return null ca marche aussi, ce qui me semble bizarre c'est qu'on te propose d'enregistrer le ".do" alors que tu spécifies un nom de fichier.... Essais juste de retourner kekchoz comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String s = "Ceci est mon fichier";
    et regardes si ca marche....

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Je sais pas si j ai ete bien clair

    Le "return null" dont je te parle, c le return de l action Struts

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    vi vi pas di probleme avec le return null (j'avais compris celui la )

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    J ai modifier le code de cette maniere
    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
     
                    //Creating csv stream and sends it to remote client
    	            String fichier = (String)(ClioCsvIOManager.getInstance().export(identiteVOAdapter, null));
    	            response.setContentType("text/plain");        
    	            response.setHeader("Content-Disposition", "attachment;filename=nomFichier.csv"); 
    			    OutputStream os = response.getOutputStream(); 
    			    InputStream is = new ByteArrayInputStream(fichier.getBytes()); 
    			    int count; 
    			    byte buf[] = new byte[4096]; 
    			    while ((count = is.read(buf)) > -1) {
    			        os.write(buf, 0, count); 
    			    }
    		        is.close(); 
    		        //os.close();
                	return mapping.findForward(ok);
    os.close est en commentaire mais j ai l exception suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.IllegalStateException: getOutputStream() has already been called for this response

  11. #11
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    il manque peut-être le flush moi je fais ça et ça marche :
    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
     
       String ReportDir = "C:\\WEB\\appli\\WEB-INF\\Excel";
       String ReportFile = "Test";
     
       response.setContentType("application/vnd.ms-excel");
       response.setHeader("Content-Disposition", "attachment; filename="+ReportFile+".csv");
     
       OutputStream os = response.getOutputStream();
     
       try
       {	
    	File f = new File(ReportDir+"\\"+ReportFile+".xls");
       	FileInputStream fs = new FileInputStream(f);
    	//Stream data back to the client
     
    	int i;
    	while( ((i = fs.read()) != -1) )
          	os.write(i);
       }
       catch(IOException e)
       {
    	System.out.println(e);
       }
     
       os.flush();
       os.close();
    Dis moi si ça te sort une exception.

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Pas de stacktrace!!!

    Ca ne marche toujours pas, j ai une invite qui s ouvre et me demande d enregistrer le fichier CvsExport.do (nom de l action en cours) et lorsque je clic sur ouvrir ou enregistrer, j ai l erreur suivante:
    Internet Explorer n a pu telecharger CvsExport.do de localhost...

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    j ai trouve, tout etait nikel, le seul probleme, c qu il fallait faire un reset de la reponse au prealable!!!!

    Merci a tous

  14. #14
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    ... ben pour le trouver ça ... enfin bon si ça marche ...

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    sous IE 5 et 5.5, il y a un bug avec l'affichage de plusieurs invites d'affilée.

    mais je ne vois pas comment le reset solutionne ton problème.... à moins que tu n'ais balancé d'autres infos dans ta response avant :

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Citation Envoyé par ptitjuju
    à moins que tu n'ais balancé d'autres infos dans ta response avant :
    Ben justement c etait le cas

  17. #17
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    ben moi dans mon cas je veux pas qu'une fenetre s'ouvre voila je m'explique,

    le client appelle le serveur d'application pour récupérer un fichier xml, le serveur d'appli appelle une base de données il récupère le fichier dans son input stream et après le serveur d'application doit renvoyer ce fichier au client sans l'ouvrir ou lui demander de l'enregistrer car le client doit parcourir ce fichier et extraire juste les données qu'il veut... Merci beaucoup de m'aider...

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

Discussions similaires

  1. [StringBuffer]Flux de données et saut de ligne
    Par Goon dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 11/02/2006, 10h32
  2. [Struts] Action au démarrage d'une appli Web
    Par javaSudOuest dans le forum Struts 1
    Réponses: 2
    Dernier message: 14/10/2005, 10h51
  3. [Débutante][Struts] Actions multiples
    Par BiM dans le forum Struts 1
    Réponses: 6
    Dernier message: 30/09/2005, 10h22
  4. [STRUTS][ACTION]Ecriture d'un PDF dans la response
    Par woodwai dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/02/2005, 10h26
  5. [STRUTS] Actions et forms
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 3
    Dernier message: 08/12/2004, 10h34

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