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 :

Rafraichissement aprés upload d'une image


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut Rafraichissement aprés upload d'une image
    Bonjour,

    J'ai une page jsp de gestion de compte où il y a une image par défaut qui se trouve dans un répertoire particulier. Pour afficher cette image j'ai le code suivant:

    out.println("<img src=\""+request.getContextPath()+"/ImageServlet?imageName="+logo+"\">");

    Ma Servlet est la suivante:

    DataOutput output = new DataOutputStream( response.getOutputStream() );
    response.setContentType("image/jpeg");

    String nomImage = request.getParameter("imageName");
    File file = null;
    FileInputStream in = null;

    String filePath = nomImage.replace("/", "\\");

    file = new File(filePath);

    if(!file.exists())
    return;

    in = new FileInputStream(file);
    response.setContentLength((int)file.length());

    byte buffer[]=new byte[4096];
    int nbLecture;

    while( (nbLecture = in.read(buffer)) != -1 )
    {
    output.write(buffer,0,nbLecture);
    }

    in.close();


    Sur cette page, l'utilisateur peut personnaliser cette image et "uploadant" son image jpg.
    Ma servlet d'upload fonctionne bien, et l'image est enregistrée sur le serveur dans un répertoire particulier.
    Une fois l'upload terminé, ma servlet d'upload rappelle la page jsp de gestion de compte mais l'affichage de l'image nouvellement uploadé ne fonctionne pas.
    je suis obligé de faire "F5" pour afficher la nouvelle image:

    rd = getServletContext().getRequestDispatcher("/UserPage.jsp");
    rd.forward(request, response);

    merci pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Petite précision, ma Servlet d'affichage d'image est dans la méthode DoGet.
    Aprés l'upload de l'image et le réappel de la page de gestion de compte, je ne passe pas dans DoGet.

  3. #3
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Salut,

    Pourrais tu détailler un peu plus stp.

    à Savoir :

    Il y a la page d'accueil qui contient le logo par défaut.
    Pour personnaliser le logo il y a :
    - Un lien vers une autre page.
    - Un formulaire caché apparait et c'est alors au niveau de la page d'accueil
    que s'effectue l'upload.
    - Ou tu passes par une nouvelle fenêtre poppup.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Voici la partie qui sert à afficher et à changer de logo dans la page de gestion de compte:

    <!-- Change your logo //-->

    <fieldset style="width: 980px; height: 180px;">
    <legend><strong><font size="2" color="#666666">Change your logo (size recommended 103x32): </font></strong></legend>
    <form method="post" enctype="multipart/form-data" name="form1" action="SrvUploadLogo">
    <br>
    <strong><font size="2" color="#666666">Logo file:</font></strong>
    <span style="margin-left:38px;">
    <input type="file" name="logo_file">
    </span>
    <br><br>
    <span style="margin-left:100px;">
    <input type="submit" value="Upload">
    </span>
    </form>
    <br>
    <img src="images/Warning_small.png" width="24" height="24">
    <strong><font size="2" color="#666666">&nbsp;You need 10 units to upload your logo</font></strong>
    </fieldset>

    <%@ page import="java.sql.*;"%>

    <%
    Connection conn = null;
    RequestDispatcher rd;

    try
    {
    String id_userpass=(String)session.getAttribute("id_userpass");
    String login_bdd = "*****";
    String password_bdd = "******";
    String url = "jdbc:mysql://*******/schneider_final";

    Class.forName ("com.mysql.jdbc.Driver").newInstance ();
    conn = DriverManager.getConnection (url, login_bdd, password_bdd);
    java.sql.Statement stmt = conn.createStatement();
    java.sql.ResultSet rs = stmt.executeQuery("select * from users where id_userpass="+id_userpass);

    if (rs.first())
    {
    String logo=rs.getString("logo");

    if (logo!=null)
    {
    out.println("<div style=\"position:absolute; top:362px; left:448px; z-index:1;\">");
    out.println("<img src=\""+request.getContextPath()+"/SrvShowLogo?imageName="+logo+"\">");
    out.println("</div>");
    }
    }

    rs.close();
    stmt.close();
    }

    catch(Exception e)
    { }
    %>
    <br>

    La page de gestion de compte sert à afficher le logo personnalisé et à changer de logo. Lorsqu'on change de logo, on upload le nouveau logo puis et réaffiche la page de gestion de compte à la fin de l'upload.

  5. #5
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    Probablement un problème de cache du navigateur. Essaie d'ajouter l'en-tête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cache-Control : private, no-store
    dans la réponse du logo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHaeder("Cache-Control", "private, no-store");
    ou de travailler avec l'en-tête "Last-Modified" (un peu plus complexe)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Je ne pense pas que cela vienne du cache puisque je ne passe même pas dans le DoGet de ma servlet d'affichage de logo au réappel de la page de gestion de compte par ma servlet servant à l'upload de nouveau logo.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Lorsque je met en commentaire la partie qui lit le fichier de ma Servlet, au réappel je passe bien dans DoGet:

    /*byte buffer[]=new byte[4096];
    int nbLecture;

    while( (nbLecture = in.read(buffer)) != -1 )
    output.write(buffer,0,nbLecture);*/

  8. #8
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Tu n'as pas répondu à ma question
    même si en lisant le code je pense avoir compris.

    Premier conseil qui as du déjà t'être donner sépare tes différentes couches.
    Commence par une servlet de connexion qui va appelé une classe dédié à la connexion et requête vers ta base de données.

    Deuxième conseil on ne code pas dans une JSP.

    Ca à plusieurs avantage.
    évité d'avoir 50 requetes avec 50 fois écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String id_userpass=(String)session.getAttribute("id_userpass");
    String login_bdd = "*****";
    String password_bdd = "******";
    String url = "jdbc:mysql://*******/schneider_final";
     
    Class.forName ("com.mysql.jdbc.Driver").newInstance ();
    conn = DriverManager.getConnection (url, login_bdd, password_bdd);
    java.sql.Statement stmt = conn.createStatement();
    de plus si tu changes ton driver de connexion tu n'as pas à parcourir toutes tes classes/Servlet c'est a un et un seul endroit de ton application.

    Ce que je te conseille de faire :
    Une servlet de connexion qui permet d'authentifier ton utilisateur si celui-ci ets bien référence tu lui affiche la page d'accueil avec le logo dans le cas contraire tu le rediriges vers une page de connexion avec un message d'erreur approprié.

    Sur ta page d'accueil tu as un lien pour changer le logo avec la page que tu as montrée.

    Ensuite à la fin de ton upload dans une servlet
    tu places en session utilisateur le nom de l'image uploader et tu redirige vers ta page d'accueil.

    Au niveau de la page d'accueil tu controle juste la présence ou non d"une image personnalisée présente en session si oui tu l'indiques au niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getContextPath()+"/SrvShowLogo?imageName="MonImagePerso"
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getContextPath()+"/SrvShowLogo?imageName="ImageParDefaut"
    .

    Si tu as df'autre question hésite pas.


    Edit pour résumer ton application devrait ressembler à cela

    JSP_Page_Connexion - > Servlet de connexion.

    non -> redirige vers la JSP_Page_Connexion
    oui -> on dirige vers la JSP_ACCUEIL

    JSP_ACCUEIL -> change logo -> JPS_DE_CHANGEMENT_LOGO
    JPS_DE_CHANGEMENT_LOGO -> vers la Servlet_Upload.
    Servlet_Upload -> JSP_ACCUEIL.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Je vais suivre tes conseils.
    Je me suis apperçu que la Servlet d'affichage de l'image venait de toi, c'était en réponse de even_heaven (afficher une image dans un dossier externe a l application dans une jsp) le 27/08/2009.
    J'ai donc repris ton code pour l'affichage d'image à partir d'un dossier externe qui fonctionne trés bien sauf dans mon cas lorsqu'on upload une nouvelle image et qu'on réaffiche la page ensuite qui a servi a appelé la servlet d'upload.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Je viens d'essayer ceci:
    JSP_COMPTE_USER -> JSP_DE_CHANGEMENT_LOGO
    JSP_DE_CHANGEMENT_LOGO -> vers la Servlet_Upload.
    Servlet_Upload -> JSP_COMPTE_USER.

    JSP_COMPTE_USER charge l'image contenu dans le répertoire spécial (il y a toujours une par défaut)
    JSP_DE_CHANGEMENT_LOGO charge l'image contenu dans le répertoire spécial

    J'ai toujours le même problème.

  11. #11
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    En affichant directement l'image depuis le navigateur utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://<Mon Site>/<ContextPath>/ImageServlet?imageName=<logo>
    As-tu le problème?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    Non pas de problème en mettant directemnt ceci:
    http://localhost:8080/PowerMobileWeb.../signature.jpg

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 73
    Points : 50
    Points
    50
    Par défaut
    J'ai trouvé mon problème. Cela venait du fait que losque je finissais d'uploader l'image, je la renommais toujours pareil car j'en avais besoin ailleur et c'était plus pratique. Maintenant en ne renommant plus ça fonctionne.
    Merci à tous pour votre aide.

  14. #14
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Petite remarque.

    Je ne sais pas si tu stocks toutes les images de chaque utilisateurs dans un même repertoire et si tu stock ou non le nom du fichier de leur logo en base.

    Dans tous les cas je te conseille de renommer le fichier uploadé avec un nom de la forme user_logo.jpg.

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

Discussions similaires

  1. [Upload] Redimensionner une image après upload
    Par putubudiarta dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2007, 12h32
  2. [Upload] upload d'une image
    Par emna_icn dans le forum Langage
    Réponses: 11
    Dernier message: 04/05/2006, 23h14
  3. [Image]upload d'une image
    Par leloup84 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/03/2006, 15h29
  4. [Upload] envoyer une image
    Par carter15_2001 dans le forum Langage
    Réponses: 22
    Dernier message: 20/01/2006, 18h52
  5. [Upload] Renommer une image uploadée
    Par Empty_body dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2006, 06h51

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