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

Développement Web en Java Discussion :

Stocker des images.. Mais où ? :)


Sujet :

Développement Web en Java

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut Stocker des images.. Mais où ? :)
    Bonjour,

    Excusez moi de vous déranger. Voila, j'ai créé une application web spring/hibernate donc un site en local en utilisant tomcat/glassfish pour le déploiement (enfin à la base surtout tomcat vu que glassfish le temps d'attente avec eclipse... ZZZzzz).

    Or, je viens de réaliser toutes les différentes pages de mon petit site qui contient un gestionnaire d'albums qui permet de visualiser des images. Seulement, maintenant il me reste à faire une partie administration qui me permettra d'importer des images... Pour le moment, j'ai mis ces dernières dans un répertoire image à l'intérieur de l'application. Or, il y a un problème qui se pose:
    Imaginons que j'ai déployé mon site autre part qu'en local à partir d'un fichier war. Il est logique que j'utilise la partie administration du site pour ajouter des albums et donc des images. Seulement, un jour je décide de modifier le site, je fais les modifications en local, je génère un war et je le déploie. En tout logique, je perds toutes les images que j'avais stocké précédemment entre les deux déploiements vu que le war en local ne les contiendra pas.

    Bref, je viens vous demander un peu d'aide et des conseils pour le petit débutant que je suis. Je vous remercie d'avance pour votre aide.

    Cordialement,

    Vinou

  2. #2
    Expert éminent
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Points : 7 039
    Points
    7 039
    Par défaut
    salut
    stocké tes images en BD te permettra de résoudre ton problème
    en utilisant des champs de type BLOB pour stocker ces images (suivant le SGBD que tu utiliseras).

    "L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent."
    - Benjamin Franklin

    De l'aide en Javascript , consultez la FAQ JS.

    De l'aide sur le FrameWork JS DHTMLX : posez vos questions sur le forum des Bibliothèques & Frameworks JS.

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    MySQL cela le fait snif ? Et cela ne va pas impliquer trop de modifications au niveau d'hibernate et les liaisons entre tables ?
    Mais comment cela se fait qu'au travail (je suis en alternance), elles sont stockées dans un répertoire dans le serveur en dehors de l'application ?

  4. #4
    Expert éminent
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Points : 7 039
    Points
    7 039
    Par défaut
    oui Mysql le fait très bien maintenant avec Hibernate comme je ne m'y connais pas assez je sais pas comment il faudra faire.
    je te propose donc les liens suivant :

    http://beaussier.developpez.com/arti...hp/mysql/blob/

    puis celui-ci :

    http://ricky81.developpez.com/tutoriel/java/jdbc/blob/

    cordialement
    "L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent."
    - Benjamin Franklin

    De l'aide en Javascript , consultez la FAQ JS.

    De l'aide sur le FrameWork JS DHTMLX : posez vos questions sur le forum des Bibliothèques & Frameworks JS.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Tu peux tout à fait stocker tes images dans un répertoire en dehors de ton application web, comme tu l'as constaté, il est même plus que nécessaire de le faire.
    Il est très simple de contourner la visibilité de l'image en dehors du conteneur web grâce à un filtre (ou une servlet).
    Dans tes pages, il suffira de prévoir un répertoire "virtuel" qu'on pourra utiliser comme url-pattern pour le filtre.
    On aurait donc une balise image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="/mon_repertoire_virtuel/monImage.jpg" ... />
    Ton filtre va être appelé, tu n'auras plus qu'à chercher l'image via l'api File (and Cie) et la renvoyer en retour par response.getOutputStream(), en précisant le content-type de préférence (image/gif ou image/jpeg etc...)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Je vous remercie pour vos reponses. Je pense que je vais me pencher sur le repertoire virtuel en tout cas merci ^^

  7. #7
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Salut,

    Stocker des images dans la base de données implique une haute performance des serveurs de BD. Sinon, le résultat est que chaque requete envoyée à la BD prend énormément de temps. Il faut faire attention aux performances.
    Le plus souvent, pour éviter ce genre de problème, un répertoire virtuel est utilisé.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  8. #8
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Points : 101
    Points
    101
    Par défaut
    Oui mais j ai essayé de créer un répertoire virtuel sous eclipse mais au final j ai opté pour le répertoire stocké dans c:/ (linked folder). Je vois pas trop comment marche le virtuel

  9. #9
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Dans un projet web, tu as généralement le repertoire WEB-INF. Dedans, tu devrais avoir un repertoire images.
    Dans le code, il suffit de mettre /images/tonimage.jpeg et ca devrait marcher.
    C'est la meme chose avec les clients lourds (swing etc.).

    De plus, les url vers tes images doivent être dans un fichier properties (ca, c'est l'idéal).

    http://www.developpez.net/forums/d20...hemin-relatif/
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vinou94400 Voir le message
    Oui mais j ai essayé de créer un répertoire virtuel sous eclipse mais au final j ai opté pour le répertoire stocké dans c:/ (linked folder). Je vois pas trop comment marche le virtuel
    On s'est mal compris, le répertoire virtuel ne représente rien d'autre qu'un discriminant pour que le filtre puisse traiter l'url différemment (lien avec url-pattern dans web.xml -> filter-mapping).
    Par exemple, si tu as un mapping
    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
    ...
        <filter>
          <filter-name>FiltreImages</filter-name>
          <filter-class>com.filter.FilterImages</filter-class>
          <init-param>
              <param-name>IMAGE_REPOSITORY</param-name>
              <param-value>c:/Temp/</param-value>
          </init-param>
        </filter>
    
        <filter-mapping>
          <filter-name>FiltreImages</filter-name>
          <url-pattern>/static-images/*</url-pattern>
        </filter-mapping>
    ...
    et une balise <img>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <img src="./static-images/repertoire1/repertoire11/image1.jpg" .../>
    fera que le filtre sera appelé et il pourra interpréter l'url pour aller chercher dans un répertoire quelconque l'image réelle et la retourner.
    Le filtre pourrait ressembler à ceci
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    public class FilterImage implements Filter
    {
        private static String IMAGE_REPOSITORY;
     
        @Override
        public void init(FilterConfig config) throws ServletException
        {
                IMAGE_REPOSITORY = config.getInitParameter("IMAGE_REPOSITORY");
        }
     
        @Override
        public void destroy()
        {
        }
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
                File file = null;
                BufferedReader reader = null;
                FileReader fileReader = null;
                ServletContext sc = null;
                try
                {
                    HttpServletRequest _request = (HttpServletRequest)request;
                    HttpServletResponse _response = (HttpServletResponse)response;
     
                    String filePath = _request.getRequestURI();
                    file = new File(IMAGE_REPOSITORY + filePath.substring(filePath.lastIndexOf("/")));
     
                    // Set content type
                    sc = _request.getSession().getServletContext();
                    String mime = sc.getMimeType(filePath);
     
                    _response.setContentType(mime);
     
                    // Set content size
                    _response.setContentLength((int)file.length());
     
                    // Open the file and output streams
                    FileInputStream in = new FileInputStream(file);
                            ServletOutputStream out = _response.getOutputStream();
     
                    // Copy the contents of the file to the output stream
                    byte[] buf = new byte[1024];
                    int count = 0;
                    while ((count = in.read(buf)) >= 0) {
                        out.write(buf, 0, count);
                    }
                    in.close();
                    out.close();
                }
                catch (Exception e)
                {
                     ...   
                }
                finally
                {
                        if (fileReader != null) try { fileReader.close(); } catch (Exception e) {}
                        if (reader != null) try { reader.close(); } catch (Exception e) {}
                }
        }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. stocker des images dans excel
    Par hkarim dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/11/2006, 10h13
  2. Réponses: 1
    Dernier message: 27/09/2006, 08h50
  3. stocker des images
    Par Kaktus dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 24/01/2006, 21h32
  4. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29

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