|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mars 2005 Messages : 7 ![]() |
Bonjour à tous,
J'ai quelques bases de développement en Java et je voudrais réaliser un petit site web bidon, histoire de me faire la main. Sur ce site web, j'ai besoin d'uploader des images, puis de les afficher, et c'est là que ça coince! Pour l'upload, pas de problème, j'utilise un bout de code trouvé sur le net adapté à mes besoins: Code :
Tout ça fonctionne à la perfection. J'ai d'ailleurs été rudement heureux de découvrir cette fonction dans les JSP 3, par rapport à la gestion des flux avec les librairies apache fileupload. Je voudrais ensuite afficher l'image que je viens d'uploader, mais j'ignore comment faire. Dans quel dossier dois-je la placer pour qu'elle soit accessible par mon serveur web (Glassfish pour le moment)? |
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() olivier pittonÉtudiant Inscription : juin 2012 Messages : 210 ![]() |
Une fois que tu as uploadé l'image, si tu l'écris sur le disque, elle sera accessible à l'endroit où tu as écris le fichier, et sera bel et bien dans le "contexte" de Tomcat.
Tu peux, par exemple, créer un dossier upload/ et y mettre toutes les images. Il te suffira alors d'aller chercher l'image spécifié dans le dossier en utilisant simplement la balise : |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 7 ![]() |
Bonjour Olivier et merci pour ta réponse.
J'ai un peu de mal à assimiler tout ça, j'ai un peu plus d'expérience avec PHP et Apache, qui n'ont pas l'air de fonctionner de la même façon. Pour mon test, j'écris mes images dans le dossier c:\temp (Windows). Ce dossier doit être créé à l'avance sinon j'ai une belle erreur de filenotfound. De même, si je ne spécifie pas un chemin complet tel que ci dessus, j'ai la même erreur. Une fois mes images envoyées, quel source devrais-je indiquer pour les afficher? Imaginons un fichier nommé 1.jgp |
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() olivier pittonÉtudiant Inscription : juin 2012 Messages : 210 ![]() |
Plop,
La source doit être : <répertoire>/1.jpg Le problème vient du "contexte" de ton serveur. Peut-il lire C:/temp ? (à priori oui) Et est-ce que le client peut y accéder ? (à priori non). Tout comme dans n'importe quel langage serveur, tu enregistres les fichiers uploadés, de préférence, dans un endroit accessible à tous. Par exemple tes css sont généralement dans css/ car le client doit pouvoir y accéder. Donc le client doit pouvoir accéder à tes images, en passant par le serveur. Le mieux serait de créer directement un répertoire upload/ (au démarrage ou de manière permanente) et lors d'un upload, tu écris dans upload/<nom_fichier>. Si on reprend ton exemple, si le client veut uploader 1.jpg, tu vas écrire le fichier dans upload/ (donc son chemin sera upload/1.jpg). Enfin tu affiches |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 7 ![]() |
Ok, je pense que mon principal ne vient pas de mon upload en lui même mais de mon manque d'expérience sur Glassfish (et non pas Tomcat comme je l'avais indiqué plus haut, corrigé depuis).
J'utilise le déploiement standard de Glassfish qui est installé automatiquement par Netbeans, du coup je n'ai pas mis les mains dans le cambouis de ce côté là et j'ignore comment se comporte réellement la bête. Contrairement à PHP & Apache que j'ai pas mal pratiqué et que je connais. Le dossier c:/temp où j'effectue mes uploads est à priori accessible par le serveur, puisque mes uploads fonctionnent et mes fichiers sont bien créés dans ce dossier. Avec PHP, je faisais généralement mes uploads dans un dossier /upload se trouvant à la racine de mon script/application. Les fichiers envoyés étaient donc facilement accessibles par les clients puisque dans le même contexte que le script. J'ai plus de mal avec Java/Glassfish, car j'ignore où se trouvent les fichiers de mon application une fois déployée sur Glassfish et je ne connais pas bien l'arborescence de tout le tralala. |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() olivier pittonÉtudiant Inscription : juin 2012 Messages : 210 ![]() |
Que tu sois sur GlassFish ou Apache ne change rien pour ce genre de choses. Chaque serveur a un répertoire courant, dans lequel tu accèdes via ".".
Que tu saches où tes images sont n'est pas le problème, il faut simplement que le serveur sache où les chercher. C'est pour cela que je te conseille de simplement créer un répertoire upload et d'y mettre tes images. Une possibilité serait de chercher manuellement le répertoire de GlassFish en utilisant "." et de créer un fichier qui pointe directement dans ton contexte (la où est déployé ta webapp). Mais cela rend le code non portable et dépendant du serveur. Mais que cela soit GlassFish ou Apache, ça revient au-même. |
|
|
00
|
|
|
#7 | |||
|
Invité de passage
![]() Inscription : mars 2005 Messages : 7 ![]() |
J'ai fait quelques tests déjà là dessus, mais je coince toujours.
Dans mon doPost, j'ai ajouté ce code qui crée un dossier: Code :
J'ai modifié l'annotation Multipartconfig de mon servlet pour que la location soit "/temp". Mais lors de l'upload, j'ai une erreur. L'écriture du fichier se fait dans le fichier suivant, mais comme le sous dossier temp dans lequel il essaie d'écrire n'existe pas, j'ai une erreur. Citation:
Dois-je créer un dossier vide dans Netbeans? Où? Dois-je le créer via un bout de code dans mon programme? Mais à ce moment quel emplacement spécifier? Je sèche. |
|||
|
|
00
|
|
|
#8 | |||
|
Membre éprouvé
![]() olivier pittonÉtudiant Inscription : juin 2012 Messages : 210 ![]() |
Citation:
Citation:
Citation:
Le but du jeu est d'uploader tes images dans ton application, et non quelque part sur ton système, afin que les utilisateurs puissent les requêter comme ils peuvent requêter un fichier JS de ton application. |
|||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : mars 2005 Messages : 7 ![]() |
Désolé pour l'absence de réponse, j'ai été occupé ces derniers temps.
J'ai testé ce que tu me dis, mais ça ne fonctionne toujours pas. Voici un screen de l'arborescence de mon projet dans Netbeans, j'ai créé à la fois un uploads dans mon projet web à la racine, et un dans WEB-INF pour être certain. ![]() J'ai modifier l'annotation Multipartconfig pour essayer l'upload dans les dossiers uploads, /uploads et ./uploads Voici les résultats : ./uploads Citation:
/uploads ou uploads (même résultat) Citation:
Dans tous les cas, j'ai essayé d'aller voir ce qui se trouvait dans le dossier où l'upload tente de se faire, le dossier TestUpload existe, mais ensuite plus rien, le dossiers upload n'existe pas. A noter que si je spécifie "" à la place de "uploads" dans l'annotation Multipartconfig, l'upload fonctionne, mon fichier est bien envoyé, mais je n'arrive pas à y accéder via un navigateur. |
||
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Tu dois créer un dossier, à l'extérieur de ton application, imaginons qu'on l'appelle c:\upload et tu y met les fichier. Ensuite tu crée un servlet, que tu mappe sur /upload/* et qui va lire ce dossier, avec un code du style: Code :
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 7 ![]() |
Merci tchize_!
Je n'y avais pas du tout pensé. Je vais tester tout ça :-) |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com