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 :

uploadfile ou autre solution pour insérer image dans ma base de donnée


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut uploadfile ou autre solution pour insérer image dans ma base de donnée
    Bonjour les génies,
    J'ai un formulaire jsf avec lequel j'insère de nouveaux employés dans mon application. L'employé est directement inséré dans une table de ma base de données.
    L'ennui est que j'aimerais qu'en insérant un nouvel employé mon formulaire puisse insérer sa photo.
    La photo est de type byte[].
    J'ai essayé de travailler avec uploadfile de primefaces mais je n'arrive pas à lier ce composant à ma variable photo de type byte[].

    SVP si quelqu'un d'entre vous a une idée n'hésitez pas à me l'offrir.

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la pluspart des composants fileupload que tu trouvera n'utilisent pas directement byte[], parce que un fichier uploadé c'est un ensemble {byte[], mimeType, filename}, il faut donc un structure pour chapoter ça. Tu devra donc avoir un bean qui prend une propriété de ce type là.

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Pourriez-vous m'éclaircir un peu comment faire pour avoir un bean qui prend une propriété de ce type là?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    avec tomahawk, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <t:inputFileUpload value="#{tonBean.upload}"/>

    et dans ton bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public UploadedFile getUpload(){....}
    public void setUpload(UploadedFile file){....}

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    donc d'après ce que j'ai compris, si j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public byte[]getPhoto(){....}
    public void setPhoto(byte[] photo){....}
    je la transforme en type UploadedFile en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public UploadedFile getPhoto(){....}
    public void setPhoto(UploadedFile photo){....}
    C'est bien ça?

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tout dépend de ce que tu fait d'autre avec ce photo, mais à priori oui. N'oublie pas lors de l'action d'extraire le contenu du fileitem, celui-ci ayant une durée de vie limitée à la requete, tu dois faire quelque chose des bytes qui se trouvent dedans pendant l'action.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Par défaut
    Salut,

    J'ai le même problème, j'arrive à récupérer les information sur la photo uploadée mais au moment d'enregistrer elle n'est plus là. Je ne comprend pas ce qui se passe.
    Voici la méthode qui recupere le contenu du fichier uploadé (byte[]):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public void handleFileUpload(FileUploadEvent uploadEvent) {
            try {
                UploadedFile file = uploadEvent.getFile();
                utilisateur.setPhoto(file.getContents());
                LOGGER.log(Level.INFO, "File uploaded, size: {0}", utilisateur.getPhoto().length);
            } catch (Exception e) {
                LOGGER.log(Level.SEVERE, "handleFileUpload", e);
            }
        }
    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LOGGER.log(Level.INFO, "File uploaded, size: {0}", utilisateur.getPhoto().length);
    me donne bien la taille de la photo en octets.

    Voici la méthode qui permet d'enregistrer un utilisateur:
    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
     
        public String doCreateUtilisateur() {
            try {
                LOGGER.log(Level.INFO, "Taille de la photo avant: {0}", utilisateur.getPhoto().length);
                utilisateurSessionBean.create(utilisateur);
                LOGGER.log(Level.INFO, "Utilisateur {0} cr\u00e9\u00e9.", utilisateur);
                if (utilisateur.getPhoto() != null) {
                    LOGGER.log(Level.INFO, "Taille de la photo après: {0}", utilisateur.getPhoto().length);
                } else {
                    LOGGER.log(Level.INFO, "Taille de la photo après: {0}", 0);
                }
                utilisateur = new Utilisateur();
            } catch (Exception e) {
                LOGGER.log(Level.SEVERE, "Erreur lors de le création.", e);
            }
            return "list.xhtml";
        }
    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOGGER.log(Level.INFO, "Taille de la photo avant: {0}", utilisateur.getPhoto().length);
    génère une exception de type NullPointerException (donc utilisateur.getPhoto() retourne null).

    Je ne comprend vraiment pas pour quoi.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Par défaut
    Je viens d'avoir une idée, mon ManagedBean est de type request, je me demande si je n'aurais pas dû déclaré un ManagedBean de type session au lieu de request.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2006
    Messages : 23
    Par défaut
    J'ai modifié la portée de mon ManagedBean (de RequestScoped en SessionScoped) et je n'ai plus de problème.

Discussions similaires

  1. [Débutant] Insérer le chemin d'une image dans une base de données access
    Par hugnka dans le forum VB.NET
    Réponses: 10
    Dernier message: 08/05/2012, 18h00
  2. ODBC insérer image dans la base MySql
    Par jojo_ol76 dans le forum JDBC
    Réponses: 8
    Dernier message: 25/05/2010, 14h58
  3. quel code pour enregistrer une image dans la base de donnée
    Par bambi98 dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/05/2009, 15h55
  4. Réponses: 5
    Dernier message: 11/03/2009, 21h46
  5. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 19h08

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