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 :

Application Java JEE avec stockage de documents, images,..


Sujet :

Développement Web en Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut Application Java JEE avec stockage de documents, images,..
    Bonjour à tous,

    je travaille actuellement sur le développement d'une application web en java à titre personnel.

    Je suis confronté à une question à laquelle d'autres ont du se confronter. Il s'agit du stockage des documents, images et leur accès au travers de l'application.

    Dans mon cas, je souhaite par exemple qu'un utilisateur puisse déposer des documents dans un espace documentaire.

    J'ai noté que les éléments pouvaient être stockés en base via un BLOB mais j'ai compris que c'était mieux de stocker le chemin d'accès dans la BD et le document/image ailleurs que dans la BD.

    Du coup, je me pose la question où? Dois-je utiliser un NAS sous linux? Si oui, est-ce la seule solution et dois je utiliser l'api Samba (ou y en a t il d'autres?) pour accéder à cet espace de stockage?

    Enfin, étant en mode développement, comment puis-je tester ma fonctionnalité? En intégrant un NAS allégé et en local à mon eclipse sous windows ou y a t il des solutions toute prête (je sais, je rêve peut être mais bon sait on jamais)?

    Je suis un peu limite sur la notion de stockage donc j'espère que je ne raconte pas n'importe quoi et si c'est le cas, désolé mais je pense que mon objectif est quand même clair.

    Merci par avance pour vos retours d'expérience.

  2. #2
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    Le soucis des espaces réseau traditionnel c'est que leurs utilisation dans un environnement Web est limité. Tu ne pourras par exemple pas récupérer l'URL d'un fichier à partir d'un <input type="file"/> classique (ou son équivalent dans d'autre langage), ce qui peut vite poser des problèmes si tu veux simplement associer l'URL d'un fichier existant à un enregistrement dans ton appli.

    Il y a plusieurs solutions à ce problème.

    - Soit tu définis un espace de stockage directement à l’intérieur de ton serveur d'application, auquel cas tu peux traiter les fichiers comme de simple File java et y avoir accès directement. Une solution que je n'aime pas trop car les utilisateurs aiment bien pouvoir accéder à cet espace en mode "Windows like" et là tu limites cet accès depuis ton programme. Et puis je trouve pas ça très propre, je préfère monter des serveurs dédiés au stockage.

    - Monter un serveur FTP. Tu y accèdes via une API dédiée ( Apache commons-net fait ça très bien ). La manipulation des fichiers reste triviale une fois la connexion établie. Gestion des droits, accessible depuis un browser, possibilité de créer un raccourcie réseau (et surement d'autres choses je suis pas très calé en FTP)..

    - Monter un serveur WebDAV. Même caractéristiques que le FTP mais propose en plus (et entre autre) du versioning. Possibilité de définir plusieurs "Magasin" pour le stockage des fichiers (DBB, système de fichier..), gestion des compte utilisateur complet ( BDD, annuaire LDAP, fichier XML ). Tu peux regarder Le projet JackRabbit de Apache pour plus d'info.

    - Il y a aussi la possibilité d'utiliser les service tel que Dropbox ou GoogleDrive qui propose des API pour synchroniser une application avec des compte utilisateurs et ainsi pouvoir exploiter les fichiers directement dans ton appli. Ici je n'ai pas vraiment de retour à te faire car c'est encore en projet chez nous

    Perso j'aime bien le WebDAV, c'est ce qu'on a développé pour notre application. C'est puissant, simple d'utilisation et la gestion des fichiers est très facile ( des méthodes PUT et GET pour écrire/lire et le tour est joué ). Demande quand même un peu de paramétrage au début.

    Après il te faudra dans tous les cas développer une couche de présentation pour accéder à ces fichiers dans ton appli.

    Voila ce qui me passe en tête pour le moment, j'espère que ça te sera utile

    Cdt.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kilvan13 Voir le message
    J'ai noté que les éléments pouvaient être stockés en base via un BLOB mais j'ai compris que c'était mieux de stocker le chemin d'accès dans la BD et le document/image ailleurs que dans la BD.
    Ben non, je dirais même tout le contraire

    Je préfère pouvoir utiliser une intégrité référentielle et stocker mes documents/images/etc... dans la DB, effectivement via des BLOB ou CLOB pour des textes longs.
    Du point de vue de l'utilisation dans une page, on va distinguer 3 cas :
    - les images
    - les documents
    - les textes longs

    Pour une image, la contrainte est de lier l'attribut "src" de l'image à une servlet ou alors de passer par un filtre (au choix) et de renvoyer le flux d'octets en retour.
    Pour les documents, ça suppose que tu gères le type mime correctement. Mais dans tous les cas, ça suppose que le poste client a une application compatible pour le gérer (on ne peut pas ouvrir un document word si on n'a pas une application pour)
    Pour les textes longs, ça dépend un peut de la longueur (et très certainement des capacités de la DB), on peut les voir comme de simple String
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Ben non, je dirais même tout le contraire

    Je préfère pouvoir utiliser une intégrité référentielle et stocker mes documents/images/etc... dans la DB, effectivement via des BLOB ou CLOB pour des textes longs.
    g
    Mouai, c'est une question de point de vue

    Je travaille avec des clients qui stockes des milliers, voire des dizaines de milliers de fichiers. Je trouve pas ça très recommandé de stocker direct en base (même si ils en ont quand même la possibilité )

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Mouai, c'est une question de point de vue

    Je travaille avec des clients qui stockes des milliers, voire des dizaines de milliers de fichiers. Je trouve pas ça très recommandé de stocker direct en base (même si ils en ont quand même la possibilité )
    Oui, ce n'est que mon point de vue... ça vaut ce que ça vaut

    Pour moi la meilleure solution est la DB... pour des raisons d'intégrité des données...
    Je trouve nul à ch... d'avoir un chemin en DB et un fichier sur disque sachant que ce dernier a pu être supprimé par inadvertance. Le contraire est bien sûr moins gênant, même si ça prend de l'espace disque alors qu'il n'y a plus de "référence" en DB.

    Mais on peut être amené à faire des compromis en fonction du volume et du nombre d'objets à inclure dans la mesure où un stockage en base de données peut être limité par l'OS et/ou la DB utilisée...

    J'oubliais un autre avantage de la DB... Lorsqu'on a une base de données répliquée, c'est d'une simplicité extrême à gérer alors qu'avec un système de fichier, c'est une véritable usine à gaz (c'est du vécu )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut
    Bonjour à tous les deux et merci pour vos réponses.

    Nico02, j'avais effectivement trouvé la solution webdav mais j'étais un peu perdu et je le suis encore un peu. J'avais compris que Webdav est le protocole de communication et il existe un pluggin eclipse pour utiliser l'api associé dans son code. Si je souhaite tester en mode développement mon code, je peux télécharger le projet jackrabbit et lancer le serveur en standalone et local pour faire mes tests. Est-ce bien cela?

    OButterlin, j'aime bien cette solution et c'est celle qui est décrire dans un livre sur lequel je m'appuie (développement n-tier de J.Lafosse) mais quand je lis sur les forums, tout le monde indique qu'il faut pas stocker les documents dans la BD, c'est pour ça que j'ai cherché une autre solution. Selon toi, je n'ai rien à craindre pour des fihiers word, pdf, images en termes de performance? Juste pour être sûr, je te précise que j'utilise Postgre comme SGBD (si jamais il y avait quelque chose de spécifique à ce SGBD à savoir).

    Merci par avance pour votre retour.

    Cordialement,

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kilvan13 Voir le message
    ...
    Selon toi, je n'ai rien à craindre pour des fihiers word, pdf, images en termes de performance? Juste pour être sûr, je te précise que j'utilise Postgre comme SGBD (si jamais il y avait quelque chose de spécifique à ce SGBD à savoir).
    ...
    Sois sans crainte, j'utilise ça dans une de mes applications sans problème.
    Certes, la base de données n'est pas la même, c'est du lourd, DB2/400 mais bon, n'oublie pas le facteur volume et limitation DB pour le choix.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Oui, ce n'est que mon point de vue... ça vaut ce que ça vaut

    Pour moi la meilleure solution est la DB... pour des raisons d'intégrité des données...
    Je trouve nul à ch... d'avoir un chemin en DB et un fichier sur disque sachant que ce dernier a pu être supprimé par inadvertance. Le contraire est bien sûr moins gênant, même si ça prend de l'espace disque alors qu'il n'y a plus de "référence" en DB.

    Mais on peut être amené à faire des compromis en fonction du volume et du nombre d'objets à inclure dans la mesure où un stockage en base de données peut être limité par l'OS et/ou la DB utilisée...

    J'oubliais un autre avantage de la DB... Lorsqu'on a une base de données répliquée, c'est d'une simplicité extrême à gérer alors qu'avec un système de fichier, c'est une véritable usine à gaz (c'est du vécu )
    Bah j'imagine que ça va dépendre aussi du contexte d'utilisation. Je travaille sur un logiciel de gestion de mainteance industrielle, et dans le cadre de leurs travail, les techniciens stockent énormément de fichier. Pour te dire j'ai 90 tables dédiées au stockage des fichiers.. Donc c'est clair qu'on ne peut pas se permettre de tout mettre en base. Mais il est vrai que ça peut poser des problèmes d’intégrité parfois ( même si ça reste rare sur un serveur dédié). Et puis bon après c'est à leurs admins de ne pas laisser n'importe qui pouvoir supprimer des fichiers on y est pour rien nous Et puis un des avantages du WevDAV c'est justement le versionning qui permet de parer au "perte" de fichiers. Ça permet aussi d'avoir potentiellement plusieurs serveurs différents.

    Nico02, j'avais effectivement trouvé la solution webdav mais j'étais un peu perdu et je le suis encore un peu. J'avais compris que Webdav est le protocole de communication et il existe un pluggin eclipse pour utiliser l'api associé dans son code. Si je souhaite tester en mode développement mon code, je peux télécharger le projet jackrabbit et lancer le serveur en standalone et local pour faire mes tests. Est-ce bien cela?
    Tout à fait. Pour ma part en debug je le lance uniquement au démarrage de mon serveur d'application mais libre à toi. Je ne travaille pas avec Eclipse donc je ne peut pas vraiment répondre sur l'utilité du Plug-in. Peut être sert il à paramétrer le serveur plus facilement qu'en allant fourrer son nez dans les fichier XML. Si c'est le cas je regrette déjà ce Plug-in Sinon il te suffit d'importer la librairie dans ton projet et commencer à t'en servir comme n'importe qu'elle autre librairie externe.

    Mais pour rejoindre un peu @OButterlin, si tu n'as pas de gros volume à traiter, un stockage en base fera très bien l'affaire dans la majorité des cas.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut
    Merci beaucoup.

    Je pense que je vais partir sur du stockage en base parce que j'ai une quinzaine de documents par utilisateur et par an maximum. 99% ne feront qu'une page ou deux (word ou pdf) donc autant dire que c'est pas grand chose.

    Par contre, je vais regarder webdav pour mon autre idée d'application parce que cela a l'air intéressant.

    Sujet résolu.

    Encore merci.

    Cordialement,

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

Discussions similaires

  1. Application Java EE avec Hibernate et Struts
    Par dravril15 dans le forum Struts 1
    Réponses: 2
    Dernier message: 28/12/2014, 21h00
  2. Exécuter une application Java RMI avec l'invite de commande
    Par lollita2321 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 03/05/2011, 14h13
  3. Réponses: 1
    Dernier message: 05/02/2008, 17h58
  4. application JAVA communiquant avec du hardware
    Par ABN84 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 14/10/2007, 09h42
  5. Réponses: 0
    Dernier message: 21/06/2007, 12h00

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