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

JSF Java Discussion :

Téléchargements d'un fichier à partir d'une page jsf


Sujet :

JSF Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut Téléchargements d'un fichier à partir d'une page jsf
    bonjour tous le monde ;
    dans une page jsf j'ai un DataTable dans lequel j'ai des commandlink qui permet de telecharger des fichier (pdf , xls ou csv) vous trouvez ci jointmon Datatable.
    le problème que j'ai est :lorsque je click sur le commandlink la fenetre qui me demande soit d'enregister soi d'ouvrir soit d'annuler le fichier s'affiche je click sur ouvrir pour vois le fichier mais un message d'erreur m'apparait me disant que "adobe Reader n'a pas pu ouvrir le fichier monfichier.pdf car le type de fichier n'est pas pris en charge ou le fichier est endommager " si j'essay de telecharger un pfd ou une page vierge si j'essaye de télécharger un fichier csv;
    l'actionlistener de mon commandlink pour telecharger un pdf est la suivante :
    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
     
        public String  loadPDF(ActionEvent event) throws IOException{
            String nomfichier =(String) reportmodel.getRowData();
            String reportPath =context+"\\"+nomfichier+".pdf";
            File file = new File(reportPath);
            byte[] fileData = new byte[(int) file.length()];
            HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.setHeader("Content-disposition", "attachment;filename="+nomfichier+".pdf");
            response.setContentLength(fileData.length);
            response.getOutputStream().write(fileData);
            response.setContentType("application/pdf");
            response.getOutputStream().flush();
            response.getOutputStream().close(); 
            return "report";
        }
    de meme pour les autres commandlink sauf je change l'extension du fichier a telecharger (au lieu du .pdf je mis .xls ou .csv),et je change l'argument du setContentType
    pour le format xls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     public String loadXLS(ActionEvent event) throws IOException{
            ..........
            String reportPath =context+"\\"+nomfichier+".xls";
    ........
            response.setHeader("Content-disposition", "attachment;filename="+nomfichier+"_"+reportDate+".xls");
           ...
            response.setContentType("application/vnd.ms-excel");
    .....
        }
    pour le format cvs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public String loadCSV(ActionEvent event) throws IOException{
            ......
            String reportPath =context+"\\"+nomfichier+".csv";
     
            ....
            response.setHeader("Content-disposition", "attachment;filename="+nomfichier+"_"+reportDate+".csv");
     ....
            response.setContentType("text/csv");
    .....
        }
    pouvez vous m'indiquer dou vient ce problème d'endommage de mes fichiers
    merci infinement
    Images attachées Images attachées  

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    je crois que mon problème vient de la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     byte[] fileData = new byte[(int) file.length()];
    est ce que c'est cette étapes qui permet de coder mon fichier?
    merci

  3. #3
    Membre actif Avatar de rushtakn
    Inscrit en
    Mai 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 213
    Points : 240
    Points
    240
    Par défaut
    ton fileData est vide.
    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     byte[] fileData = new byte[(int) file.length()];
    permet juste d'initialiser le tableau.
    Je suppose que tu veux charger le contenu de file dans fileData. Regarde par exemple du coté de FileInputStream pour faire ça.

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    bonjour
    merci rushtakn pour ton aide, effectivement j'essaye de telecharger un fichier vide ;
    j'ai oublierde remplire mon response.getOutputStream par le contenu du mon fichier,
    voila l'action a executer pour telecharger un fichier pdf :
    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
     
        public String  loadPDF(ActionEvent event) throws IOException{
            String nomfichier =(String) reportmodel.getRowData();
            String reportPath =context+"\\"+nomfichier+".pdf";
            File file = new File(reportPath);
            FileInputStream in = new FileInputStream(file);
            BufferedInputStream fileInBuf = new BufferedInputStream(in);
            FileInputStream fis = new FileInputStream(file);
            final int BUF_SIZE = 4096;
            byte buf[] = new byte[BUF_SIZE];
            int length = 0;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
     
            while ((length = fileInBuf.read(buf)) > 0) {
                    baos.write(buf, 0, length);
            }
            byte[] fileData = new byte[(int) file.length()];
            fileData = baos.toByteArray();
            HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
            response.setHeader("Content-disposition", "attachment;filename="+nomfichier+".pdf");
            response.setContentLength(fileData.length);
            response.getOutputStream().write(fileData);
            response.setContentType("application/pdf");
            response.getOutputStream().flush();
            response.getOutputStream().close(); 
            return "report";
        }
    merci pour votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/09/2010, 18h43
  2. Réponses: 0
    Dernier message: 16/08/2010, 14h03
  3. Réponses: 5
    Dernier message: 11/02/2010, 23h41
  4. Envoyer un Email à partir d'une page JSF
    Par tunbader dans le forum JSF
    Réponses: 1
    Dernier message: 27/04/2009, 15h59
  5. [HTML] Telechargement d'un fichier à partir d'une page HTML
    Par padraig29 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/11/2006, 15h31

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