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

Servlets/JSP Java Discussion :

Api Commons FileUpload


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut Api Commons FileUpload
    Bonjour,

    J'ai commencé à travailler sur une servlet permettant d'uploader des images sur le serveur (ce qui fonctionne).
    Par contre, j'essaye d'afficher cette image après l'avoir enregistrée et quelques fois ce traitement se déroule avant la fin de l'enregistrement. Cela signifie que je rentre dans mon doGet avant d'avoir exécuté complètement mon doPost... et ne sais pas comment résoudre le problème.

    J'ai bidouillé la méthode doGet pour la relancer si l'image n'était pas totalement chargée mais cela reste une solution temporaire.

    Code html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="div_ajax_galerie" class="ajax_bloc">
    		<iframe id="frame_galerie_chien" name="frame_galerie_chien" height="0" width="0" frameborder="0" scrolling="yes"></iframe>
    	   	<form id="form_galerie_chien" enctype="multipart/form-data" method="post" target="frame_galerie_chien" action="uploadFile.html" onsubmit="ajax.loadUrl('uploadFile.html?idAjax=valider1', new Array('txtFile'));">
    	   		<input type="file" name="txtFile" id="txtFile" /><br />
    	   		<input type="submit" id="submitID" name="submit" value="Charger" />
    	   	</form>	
       	</div>
    Code doGet :
    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
     protected void doGet(HttpServletRequest _request, HttpServletResponse _response) throws ServletException, IOException {
                   PrintWriter printWriter = _response.getWriter();
                   HashMap<String, String> map = Fonction.requestParamToHashMap(_request);
                   
                   try{
                           if (_request.getSession() != null) {
                                   // Récupére l'objet UploadFileListener contenu dans la session
                                   UploadFileListener listener = (UploadFileListener)_request.getSession().getAttribute(Constante.SESSION_LISTENER);
           
                                   String attribut = map.get("file_chien_0");
                                   attribut = (attribut == null) ? map.get("file_chien_1") : attribut;
                                   
                                   if(!Fonction.isNull(attribut)){
                                           // Si l'image est chargée complètement sur le serveur alors l'afficher
                                           if (listener != null && listener.getBytesRead() == listener.getContentLength()) {
                                                   _request.getSession().setAttribute(Constante.SESSION_LISTENER, null);
                                                   
                                                   // Afficher l'image
                                                   String src = _request.getContextPath() + "/" + PATH + attribut;
                                                   Image image = new Image(Constante.IMG_WIDTH, Constante.IMG_HEIGHT, src);
                                                   printWriter.println(Constante.DIV_AJAX_BLOC + "#" + ImageImpl.genererHtml(image)); //$NON-NLS-1$
                                           }else{
                                                   doGet(_request, _response);
                                           }
                                   }
                           }
                   }catch (Exception e) {
                           e.printStackTrace();
                           Message message = new Message(Messages.getString("Exception.generique"), Constante.MSG_ERREUR); //$NON-NLS-1$
                           printWriter.println(Constante.DIV_AJAX_MESSAGE + "#" + MessageImpl.genererHtml(message)); //$NON-NLS-1$
                   }
           }
    Code doPost :
    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
    protected void doPost(HttpServletRequest _request, HttpServletResponse _response) throws ServletException, IOException {
                   ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
                   FileItem fileItem = null;
                   UploadFileListener listener = new UploadFileListener();
     
                   // Ajouter le listener à la session
                   _request.getSession().setAttribute(Constante.SESSION_LISTENER, listener);
     
                // Associer le listener Apache aux fichiers
                upload.setProgressListener(listener);
     
                   try {
                           if(ServletFileUpload.isMultipartContent(_request)){
                                   List<FileItem> uploadedItems = upload.parseRequest(_request);
                                   Iterator<FileItem> i = uploadedItems.iterator();
     
                                   // Parcourir tous les fichiers à uploader
                                   while (i.hasNext()){
                                           fileItem = (FileItem) i.next();
     
                                           if (fileItem.isFormField() == false) {
                                                   if (fileItem.getSize() > 0) {
                                                           // Créer le nouveau fichier
                                                           File uploadedFile = new File(getServletContext().getRealPath(PATH), fileItem.getName());
     
                                                           // Enregistrer le fichier sur le serveur
                                                           fileItem.write(uploadedFile);
                                                   }
                                           }
                                   }
                           }
                   } catch (FileUploadException e) {
                           e.printStackTrace();
                   } catch (Exception e) {
                           e.printStackTrace();
                   }      
           }
    Un grand merci pour votre aide.

  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 : 46
    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
    pourquoi fais-tu faire à ton browser deux requêtes en // (un post et un get) au lieu de faire uniquement un post (qui afficherais l'image à la fin du post)?

  3. #3
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut
    En fait je n'arrive pas à gérer la réponse en doPost, dès que j'écris dans ma _response.getWriter() ma méthode javascript qui gère l'Ajax reçoit bien une réponse mais vide

    Lorsque j'ai lu de la doc concernant la mise en place d'un upload de fichier, les exemples utilisaient une barre de chargement dans le doGet. Je me suis donc basé sur cela pour mon cas.

    Merci pour ton aide.

  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 : 46
    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
    Ok, je viens de comprendre, tu fait l'upload dans une iframe et tu fait du ajax pour rafraichir la page. Ton problème, c'est que tu déclenche ton ajax sur le onsubmit, alors que tu devrais le déclencher uniquement après que le iframe aie recu la réponse, ca veux donc dire que tu dois, dans ton post, créer un page html contenant uniquemenht du javascript destiné à informer le document contenant qu'il doit faire un rafraichissement quelconque. Dans tous kles cas, c'est une question javascript, rien à voir avec l'api commons fileupload. C'est à doit de t'rranger pour que le browser ne fasse le get que lorsque le résultat du post a été recu.

  5. #5
    Membre chevronné Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Par défaut
    Ok, merci pour l'explication aussi rapide.
    Par contre désolé d'avoir posté la question sur le mauvais forum, j'avais mal interprété mon problème, je pensais mal utiliser l'api commons fileupload

    Je passe donc le sujet à résolu !

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

Discussions similaires

  1. api commons.net.ftp : pb avec listFiles
    Par kam81 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 02/07/2007, 14h14
  2. Aide sur l'api Common Controls
    Par zizoux5 dans le forum Struts 1
    Réponses: 1
    Dernier message: 23/05/2007, 12h14
  3. Pb de compatibilité commons-fileupload/JDK 1.4
    Par PIFFRE dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/04/2007, 15h33
  4. API commons.net.ftp d'APPACHE : IOException
    Par kam81 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 20/12/2006, 09h03
  5. Réponses: 3
    Dernier message: 08/05/2006, 23h31

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