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 :

Comment faire un download de fichier ???


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Points : 93
    Points
    93
    Par défaut Comment faire un download de fichier ???
    Bonjour tout le monde,

    J'ai une question plutôt simple. J'aimerais offrir la possibilité de voir ou télécharger un fichier à partir du site. Quelqu'un peut m'expliquer ça? Juste une précision, j'affiche une liste de fichier donc le lien ne peut être statique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <rich:dataGrid columns="1" value="#{BeanTelechargement.listFichier}"
    						var="fichier">
    	<html:commandLink value="#{fichier.fileName}" .../>
    </rich:dataGrid>
    En fait c'est les ... que je ne voit pas par quoi remplacer.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    uu peux faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:commandLink action="#{bean.download}" >
    <h:outputText value="#{bean.fileName}" />
    </h:commandLink>
    et dans le bean:

    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
    public void download(){
     
    ...
    ...
    //déclaration context/response..
    byte [] fileByte ;//récupèrer le flux du fichier
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment; fileName=" + fileName + "");
    OutputStream out;
     
    try {
    out = response.getOutputStream();
     
     out.write(fileByte);
    out.close();
    context.responseComplete();
    } catch (IOException e) {
    e.printStackTrace();
    }
     
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Points : 93
    Points
    93
    Par défaut
    Cooooooool, c'est le dernier truc qui me manque afin de finir la V1 de mon site. Je teste ca se soir ou demain et je te dis si ca marche.

    Merci beaucoup

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Points : 93
    Points
    93
    Par défaut
    Juste une question, comment on fait pour convertir un file en byte[]?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 158
    Points : 93
    Points
    93
    Par défaut
    finalement j 'ai trouver. Pour ceux que ca peut aider voici le code complet

    coté jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <html:commandLink action="#{BeanTelechargement.telecharger}"> <!-- on appel la methode du bean BeanTelechargement -->
    	<html:outputText value="#{fichierExistant.name}"/> <!-- le nom du fichier -->
    	<core:param name="fichier" value="#{fichierExistant}"/><!-- on passe le fichier en parametre -->
    </html:commandLink>
    coté bean:
    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
     
    	public String telecharger()
    	{
    		FacesContext context = FacesContext.getCurrentInstance();
    		HttpServletResponse response= (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
    		Map map = context.getExternalContext().getRequestParameterMap();
    		String fichierChemin = (String) map.get("fichier"); // on recupere le chemin du fichier
    		File fichierSelectionne = new File(fichierChemin); // on charge le fichier
    		response.setContentType("application/octet-stream");
    		response.setHeader("Content-Disposition", "attachment; fileName=" + fichierSelectionne.getName() + "");
    		OutputStream out;
    		int taille = (int)fichierSelectionne.length();
    		byte[] fichierEnByte = new byte[taille];
    		try
    		{
    			out = response.getOutputStream();
    			BufferedInputStream in = new BufferedInputStream(new FileInputStream(fichierSelectionne)); // on met le fichier en buffer
    			in.read(fichierEnByte, 0, taille); // on le converti en byte[]
    			out.write(fichierEnByte); // on ecrit le tableau dans la sorti standard
    			out.flush(); // pas forcement necessaire mais je l'ai mis au cas ou
    			out.close(); // on ferme la sortie standard
    			context.responseComplete(); // on signale la finalisation
    		}
    		catch (IOException e){e.printStackTrace();}
    		return "";
    	}
    Merci Sniper37. J'ai trouver l eplication de Janitrix fait dans un autre topic clair aussi pour le file to byte[] (http://www.developpez.net/forums/d35...mer-file-byte/).

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2008
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    j'ai suivi l'exemple pour télécharger un fichier pdf sachant que je le créé avec la bibliothéque Itext mais il m'affiche toujours ça
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    %PDF-1.4
    %����
    4 0 obj
    <</Length 551/Filter/FlateDecode>>stream
    x��U�r�@��+�*&�kɉX�"e��!��ĘK��'��_d��R�̢~��_OW�."z�J��!�!BHf%I�1���]��[�M<�
    Ɠi2����z�pr5�o��F��ޭ�`��'�5���B��m!ݟ�2LI#̒����5��
    N��*���WK�)(^�_i�������&fg1���+���f^�?��[����t���_*�#d��/���O���RJ�{5�a�u�2��P)��pF��Y���c8���T�����^M��(ȴ�pJ�X쪜p��4��Ů�	�i��t�qZ�J�p�3>�@�z�R�Ǟ�3H���0^�o`���,_�n��yD� -�&���ކ�@ "�sҀ��Z�)UmgivY���r�������a����#�#�(&��A�@R�C�����u��kGp&v�-bo<
    ��#	Q�_���(F,ሆ*�Xvq��F�G�#�PB�~u�ES��V+�\�0�V�r�����03e��ǿ��	�O/&���Q��<
    endstream
    endobj
    6 0 obj
    <</Parent 5 0 R/Contents 4 0 R/Type/Page/Resources<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]/Font<</F1 1 0 R/F2 2 0 R/F3 3 0 R>>>>/MediaBox[0 0 595 842]/Rotate 90>>
    endobj
    1 0 obj
    <</BaseFont/Helvetica/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
    endobj
    2 0 obj
    <</BaseFont/Helvetica-Bold/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
    endobj
    3 0 obj
    <</BaseFont/Times-Roman/Type/Font/Encoding/WinAnsiEncoding/Subtype/Type1>>
    endobj
    5 0 obj
    <</ITXT(5.0.2)/Type/Pages/Count 1/Kids[6 0 R]>>
    endobj
    7 0 obj
    <</Type/Catalog/Pages 5 0 R>>
    endobj
    8 0 obj
    <</Producer(iText 5.0.2 \(c\) 1T3XT BVBA)/ModDate(D:20100528174408+02'00')/CreationDate(D:20100528174408+02'00')>>
    endobj
    xref
    0 9
    0000000000 65535 f 
    0000000818 00000 n 
    0000000906 00000 n 
    0000000999 00000 n 
    0000000015 00000 n 
    0000001089 00000 n 
    0000000633 00000 n 
    0000001152 00000 n 
    0000001197 00000 n 
    trailer
    <</Root 7 0 R/ID [<b89b45d6159785b15af7656843edb1ab><3c35735d4e4ee33bb38b6ddf5263399b>]/Info 8 0 R/Size 9>>
    startxref
    1327
    %%EOF

    je veut que l'utilisateur puisse télécharger le fichier pdf

    merci

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

Discussions similaires

  1. [VB6] Comment faire pour lire un fichier en streaming ?
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/04/2006, 17h56
  2. [VB6] Comment faire pour lire un fichier m3u (playlist)
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/04/2006, 10h56
  3. Réponses: 2
    Dernier message: 23/11/2005, 16h30
  4. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22
  5. [TP]comment faire pour lire un fichier son
    Par sovo dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 19/09/2004, 19h33

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