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 :

Problème de Upload et Download de fichiers


Sujet :

JSF Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut Problème de Upload et Download de fichiers
    Salut,

    j'ai créé une application web, et j'aimerais uploader et dowloader des fichiers qui se trouvent sur un serveur d'application.

    Pour ce qui est de : upload, j'ai vu qu'il existe en iceFaces <ice:inputFile> j'ai donc essayé, voici ce que j'ai écris dans mon fichier xhtml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <ice:panelGroup>	
       <ice:inputFile id="inputFileComponent" 
                         file="#{user.file}" />
       <ice:message for="inputFileComponent" />
       <ice:outputText value="#{user.fileLocation}" />
     </ice:panelGroup>
    ensuite voici mon bean user :

    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
     
    @Name("user")
    public class User {
     
        File file;
        String fileLocation;
     
        public File getFile() {
            return file;
        }
     
     
     
        public String getFileLocation(){
            return fileLocation;
        }
     
        public void setFile(File file) {
            this.file = file;
            fileLocation = file.getPath();
        }
     
     
    }
    et enfin j'ai ajouté ces lignes dans web.xml pour indiquer où doivent se trouver les fichiers uploader sur le serveur d'applications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <context-param>
            <param-name>com.icesoft.faces.uploadDirectory</param-name>
            <param-value>C:\Uploads</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.uploadDirectoryAbsolute</param-name>
            <param-value>true</param-value>
        </context-param>
    Mon problème est que malheureusement, le fichier n'est pas uploader sur mon serveur d'application, j'ai dû oublié quelque chose mais quoi ?

    Pour ce qui est de download : et bien sur cette question je n'ai pas trouvé comment faire donc si vous connaissez des tuto ou des bouts de code qui peuvent m'aider, je suis preneur

    Je travail avec JBoss-4.2.0.GA, JBoss-seam-2.0.1.GA

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Pour upload ça fonctionne, mais le problème c'est que lorsqu'un fichier se upload sur le serveur il y a création d'un dossier avec un nom composé que de chiffre, et on y trouve le fichier que j'ai uploader.
    Le problème est que Je voudrais spécifier le nom du dossier, par exemple pour les fichiers dont l'extension est .jpg, qu'ils se trouvent sous le dossier image du serveur, pour les fichiers txt, qu'ils se trouvent sous le dossier texte etc...

    Est-ce que cela est possible ?
    Si oui comment faire.

    Ensuite deuxième problème, je n'arrive pas à trouver comment downloader un fichier qui se trouve sur le serveur vers le client, si quelqu'un à une idée, je suis preneur

    Petit rappel, je travaille avec le serveur d'application JBoss-4.2.2.GA, java version 1.5, eclipse 3.3, et le framework seam-2.0.2.CR1

    Merci

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    pour le download c'est pas lies au JSF,tu peux faire des lien vers tes fichier et la d'apres les extension le browser sais ce qu'il a faire download ou affichage.
    sinon tu utilise le outputstram de servletresponse ou tu ecrit ton stream de byte et tu envoie(pour plus d'info cherche sur topic sur jasper report et jsf ; ca inclue ce que tu veux faire).

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Salut, merci pour ta réponse

    Donc si j'ai bien compris, pour pouvoir uploader et dowloader des fichiers, il faut obligatoirement passer par des servlets ?

    Par contre, tu dis : "tu peux faire des lien vers tes fichier et la d'apres les extension le browser sais ce qu'il a faire download ou affichage"

    Là je n'ai pas compris...

    et enfin tu dis aussi : "(pour plus d'info cherche sur topic sur jasper report et jsf ; ca inclue ce que tu veux faire)."

    Et là aussi je n'ai pas compris où il faut que je cherche désolé

  5. #5
    Membre confirmé Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Points : 597
    Points
    597
    Par défaut
    Pour le download tu peux utiliser la servlet de JSF ....
    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
     
    			FacesContext context = FacesContext.getCurrentInstance();
    			ExternalContext ec = context.getExternalContext();
    			HttpServletResponse response = (HttpServletResponse) ec
    					.getResponse();
    			response.reset();
    			response.setContentType("application/csv");
    			response.setHeader("Content-Disposition",
    					"filename=Repartition-Agence.csv");
    			response.setHeader("Content-Transfer-Encoding", "binary");
    			ServletOutputStream sop = response.getOutputStream();
    			StringBuffer sb = rechercheLocal.getRepartitionAgenceIris();
    			sop.write("mon;fichier;csv");
    			sop.flush();
    			context.responseComplete();

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    ca parle de la meme chose http://www.developpez.net/forums/sho...ghlight=jasper

    mais heid t'as donne le code necessaire

  7. #7
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Merci pour le code,

    par contre je ne comprend pas comment cette méthode fonctionne, voila, moi j'aimerais avoir un formulaire en jsf avec un bouton download qui appel une méthode dont le corps de cette méthode serait ton code, du coup est ce que c'est possible avec le code que tu m'as donnés, si oui, pourquoi ?

    En résumé : Est ce que ton code va pouvoir récupérer un fichier qui se trouve sur le serveur et le télécharger sur le client ?

  8. #8
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Pour être plus clair voici les endroits de code que je ne comprend pas :

    response.setContentType("application/csv");

    je ne comprend pas à quoi correspond "aplication/csv" : est ce que c'est le dossier sur le serveur où se trouve les différents fichiers ?

    response.setHeader("Content-Disposition", "filename=Repartition-Agence.csv");

    Là j'imagine que c'est le nom du fichier à downloader

    sop.write("mon;fichier;csv");

    la méthode write prend en paramètre un byte[] du coup est ce que je dois transformer mon fichier en un byte[] ?

    Je suis désolé pour toutes ces quetions , mais je ne suis pas très à l'aise avec ces notions de servlet

  9. #9
    Membre confirmé Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Points : 597
    Points
    597
    Par défaut
    Je suis désolé pour toutes ces quetions , mais je ne suis pas très à l'aise avec ces notions de servlet
    On est tous passé par la

    Tu peux tester le code que je t'ai envoyé, il te renverra un fichier csv que ton navigateur te proposera d'ouvrir avec excel (si installé).

    application/csv stipule le type MIME dans les entête HTTP. C'est a dire, quel est le format du stream réseau que tu retourne au navigateur et avec quoi l'ouvrir. http://fr.wikipedia.org/wiki/Type_MIME

    response.setHeader("Content-Disposition", "filename=Repartition-Agence.csv");
    c'est en effet le nom que le navigateur te proposera de télécharger, sinon il te met un truc crados.
    sop.write("mon;fichier;csv");
    et bien la c'est ton fichier, dans mon exemple c'est une chaine de caractère, pour toi, tu dois lire ton fichier et renvoyer son contenu sous forme de bytes.

    EDIT : au passage je crois que IE préfère quand on met la taille du fichier dans les header.

  10. #10
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    Merci pour ces explications.

    J'ai donc essayer mais malheureusement lorsque je clique sur le bouton download de mon application, ça réfléchi pendant 1minute environ, et rien ne se passe, voici mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public void download(){
    		try {
     
    			FacesContext context = FacesContext.getCurrentInstance();
    			ExternalContext ec = context.getExternalContext();
    			HttpServletResponse response = (HttpServletResponse) ec
    			.getResponse();
    			response.reset();
    			response.setContentType("image/jpeg");
    			response.setHeader("Content-Disposition",
    			"filename=organigramme.jpg");
    			response.setHeader("Content-Transfer-Encoding", "binary");
     
    			ServletOutputStream sop;
     
    			sop = response.getOutputStream();
     
                            // Transormation de mon fichier en byte[]			
     
    			File fichier = new File("c:\\organigramme.jpg");
    			byte[] tableau = new byte[(int) fichier.length()];
    			FileInputStream in = new FileInputStream(fichier);
    			in.read(tableau);
     
     
    			sop.write(tableau);
    			sop.flush();
    			context.responseComplete();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    Je ne vois pas d'où vient le problème ?

  11. #11
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    J'ai installé firebug, et je viens de voir qu'il y a erreur lorsque le download s'exécute, voici cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [window.sync-connection] receive broadcast failed TypeError: _2e5.contentAsDOM() has no properties message=_2e5.contentAsDOM() has no properties
    Je ne sais pas non plus d'où ce problème peut venir

    Pour info, je travaille avec le framework seam version 2.0.2.GA, icefaces, jsf

  12. #12
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    222
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 222
    Points : 120
    Points
    120
    Par défaut
    J'ai résolu mon problème

    Pour le upload, j'avais un problème de syntaxe avec ice:inputFile

    pour le download, j'ai fait ma propre servlet

    Merci pour votre aide

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

Discussions similaires

  1. Upload et download de fichier
    Par jroman dans le forum Débuter
    Réponses: 3
    Dernier message: 28/06/2011, 09h09
  2. upload et download de fichiers sur serveur
    Par hutch13015 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 21/07/2010, 22h15
  3. [AJAX] upload ajax avec des fichier compressé..
    Par Cristabelle dans le forum AJAX
    Réponses: 1
    Dernier message: 18/05/2010, 10h22
  4. [Upload] le download des fichiers
    Par gabi27685 dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2008, 15h55
  5. Upload et download de fichier sans utiliser JSP
    Par RR instinct dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2006, 12h08

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