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

Tomcat et TomEE Java Discussion :

[Tomcat] Redemarrage obligatoire apres un upload


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut [Tomcat] Redemarrage obligatoire apres un upload
    Bonjour tout le monde,
    J'espere que vous allez bien .
    J'ai fais un formulaire où on peut uploader des images dans le repertoire /IMG/ de ma webapps.
    Le problème est que quand je veux lire cette image sur le site, il faut que je redemarre tomcat apres l'upload afin qu'elle soit pris en compte sinon elle ne l'est pas.

    Y'a t'il un moyen d'eviter ou de contourner ceci ? Je me vois mal redemarrer tomcat a chaque fois que quelqu'un upload une image.
    Bien sur je pourrais definir un chemin absolu ( C:/..... image.jpg ) , mais cela ne fonctionne pas sous FireFox (javais lu quelques post à ce sujet comme quoi ca ne fonctionne jamais, enfin bon...).

    Voila voila si quelqu'un avait une solution à ce problème.
    Merci d'avance

    ++
    ShinJava

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Quelques questions ?

    1. Après un upload, l'image est-elle bien copier de suite dans le répertoire /IMG/ de ta webapps ??

    2. Si tu affiches le contenu du répertoire IMG ( http://.../IMG/ ), qu'est-ce que tu obtiens ?

    3. Je n'ai pas compris pourquoi tu devrais utiliser un chemin absolu ? et pourquoi cela ne marcherais pas sous Firefox ?

    a++

  3. #3
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Salut,
    Merci pour ton message.

    1. L'image est bien copié dans le repertoire /IMG/ de la webapps.
    Apres l'upload de l'image par un servlet (FileUpload), je suis rediriger vers une jsp qui affiche les informations entrées dans un formulaire, ainsi que l'image (mais la elle s'affiche uniquement apres avoir relancé tomcat).

    2. Dans le repertoire /IMG/ il y'a bien l'image en question, quand je fais http://localhost:8080/work/IMG/ par exemple, je n'ai pas la nouvelle image, les autres sont bien la.
    Maintenant quand je redemarre tomcat, l'image apparait.

    3. Etant donné que l'image est stocké sur le serveur me suis dit que jpourrais faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="C:/..../image.jpg">
    ce qui fonctionne tres bien sous IE mais pas sous FireFox. J'ai fais quelques recherche sous google, et jsuis tombé sur une liste de discussion qui disait que cela ne fonctionnait pas sous firefox. A savoir pourquoi ? Aucune idée, mais bon j'y ai fini par y croire car j'ai essayé de plusieurs manieres dont celles-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    <img src="C:\....\IMG\Image.jpg">
    <img src="C:/..../IMG/Image.jpg">
    Ca marche sous IE mais pas FireFox.

    Voila voila

    ++
    ShinJava

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    3 : Firefox est un peu plus strict que IE, et il attend que tu lui spécifies le protocol pour l'accès au fichier (file://) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="file://C:\....\IMG\Image.jpg">
    IE étant liée à l'explorateur de fichier de Windows, il interprète "C:\....\IMG\Image.jpg" comme "file://C:\....\IMG\Image.jpg"...

    Par contre cela n'ira pas chercher l'image sur le serveur mais sur le poste client... et je ne pense pas que ce soit ce que tu cherches à faire...



    1 et 2 : C'est vraiment bizarre comme comportement...
    Tu peux montrer le code où tu sauvegarde le fichier ???

    a++

  5. #5
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Re,

    3: Merci pour l'explication, cela fonctionne et effectivement je n'avais pas penser à ce que l'image soit repris dans le poste client. Donc du coup j'abandonne cette idée.

    1 et 2. Voici le 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
    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
    65
    66
    67
    68
    69
    70
    71
     
      try{       
                boolean isMultipart = FileUpload.isMultipartContent(request);
     
                   // Create a new file upload handler 
                   DiskFileUpload upload = new DiskFileUpload(); 
     
                   // Set upload parameters (a exploiter!)
                   int  yourMaxMemorySize = 512 * 1024 * 8;
                   int  yourMaxRequestSize = 1024 * 1024 * 8; 
                   String yourTempDirectory = "C:\\TEMPO/";
     
                   upload.setSizeThreshold(yourMaxMemorySize); 
                   upload.setSizeMax(yourMaxRequestSize); 
                   upload.setRepositoryPath(yourTempDirectory); 
     
                   //Parse the request
                   List items = upload.parseRequest(request); 
     
                   // Process the uploaded items 
                   Iterator iter = items.iterator(); 
                   while (iter.hasNext()) { 
     
                       FileItem item = (FileItem) iter.next(); 
     
                       //   Process a regular form field 
                       if (item.isFormField()) { 
                       // A ameliorer      
                       if (item.getFieldName().equals("Path"))
                            {
                                Article.setItemPath(item.getString());
                            }
                            if (item.getFieldName().equals("Title"))
                            {
                                Article.setItemTitle(item.getString());
                            }
                            if (item.getFieldName().equals("Desc"))
                            {
                                Article.setItemDesc(item.getString());
                            }
                            if (item.getFieldName().equals("Price"))
                            {
                                //Article.setItemPrice(Integer.parseInt(item.getString()));
                                Article.setItemPrice(item.getString()); 
                            }
                            if (item.getFieldName().equals("Qty"))
                            {
                                 Article.setItemQty(item.getString()); 
     
                            }
     
                       } 
     
                      // Process a file upload 
                      else { 
     
                            String fieldName = item.getFieldName();
                            String fileName = item.getName();
                            //String contentType = item.getContentType();
                            //boolean isInMemory = item.isInMemory();
     
                            Article.setItemPath(Article.getItemPath()+"/"+fileName);
     
                            File uploadedFile = new File("C:\\Program Files/Apache Software Foundation/Tomcat 5.0/webapps/work/web/IMG/"+Article.getItemPath());
     
                item.write(uploadedFile);
     
     
     
                      } 
    }
    L'image est bien uploadé.

    Merci
    ++
    ShinJava

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Trois remarques :

    1. Apparemment tu utilises l'API commons-upload de jakarta, mais la classe DiskFileUpload est dépréciée. Tu devrais utiliser ServletFileUpload avec un DiskFileItemFactory à la place...

    2. Tu ne devrais pas utiliser le chemin de Tomcat car non seulement ton application devient dépendante du serveur d'application mais également de son emplacement d'installation ainsi que du système sur lequel il est installé...
    Utilise la méthode getRealPath() de ServletContext à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File uploadedFile = new File( request.getSession().getServletContext().getRealPath("/IMG/" + Article.getItemPath() );
    Et vérifie toujours ce que te renvoi Article.getItemPath()...


    3. Enfin quel est le nom de ton application web ???
    Je m'explique, chez moi le répertoire webapps de Tomcat comporte les différentes applications...
    Et donc d'après le chemin que tu utilises, pour accéder à ton image il faudrait utiliser l'url http://localhost:8080/work/web/IMG/ (work étant le nom de ton application et web/IMG son arborescence...


    Par contre je ne m'explique toujours pas pourquoi il faut redémarrer tomcat...

    a++

  7. #7
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,


    Il manque peut etre un flush dans l'implementation pas defaut.

    Essaie peut etre de recuperer l'OutputStream avec la methode getOutputStream()

    Et de gerer l'ecriture du fichier toi même..


    C'est juste une idée...

  8. #8
    Membre averti Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Points : 357
    Points
    357
    Par défaut
    Bonjour,
    Désolé pour ma réponse tardif, mais tout le système à crasher a cause d'une mauvaise manip de ma part (de tte facon j'avais besoin de tout reinstaller, ce fut l'occasion).

    Pendant le reinstall j'en ai profiter pour lire le class loader howto de tomcat :
    http://jakarta.apache.org/tomcat/tomcat-5.0-doc/class-loader-howto.html

    Je me rappel que j'avais mis le fileupload.jar dans le repertoire JAVA/jre/ext/lib + Tomcat/Common/lib + Tomcat/Shared/lib ....
    Cette fois-ci je l'ai mis uniquement dans Shared/lib ... et vous savez quoi ? Quand j'ai relancé ma webapps bah cela a fonctionné sans probleme ! L'image s'uploade et je peux la regarder sans avoir besoin de relancer tomcat !

    Alors tout d'abord un grand merci adiguba, t'es conseils et ton experience sont toujours aussi précieux, j'apprend beaucoup !
    Pour répondre à ta question , oui ma webapps s'appel "work". Au fait je te l'avais deja dit y'a longtemps, mais j'aime bien ton avatar .

    fabszn : merci a toi aussi ! tu m'a deja aider y'a pas longtemps.

    Je vous remercierais jamais assez !

    ++
    ShinJava

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

Discussions similaires

  1. [HttpUnit] [Tomcat] Connexion refusée après identification valide
    Par 84mickael dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 14/08/2007, 16h51
  2. [Upload] Comment écraser un fichier après un upload
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 21/03/2007, 14h30
  3. [JSF]Ecrire le fichier sur le serveur après l'upload
    Par adrien.nicolet dans le forum JSF
    Réponses: 2
    Dernier message: 06/06/2006, 17h35
  4. Réponses: 10
    Dernier message: 24/05/2006, 17h28
  5. Rendre champ obligatoire après un test IF
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 22/01/2006, 19h28

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