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 :

Servlet devant charger une image dans un tableau de byte


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 213
    Points : 128
    Points
    128
    Par défaut Servlet devant charger une image dans un tableau de byte
    Bonjour,

    je cherche à créer une servlet devant charger une image dans un tableau de byte, configurer le type de contenu pour une image, configurer l'entête content-length (le nombre de byte dans le tableau) et envoyer l'image dans la réponse au client.

    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
    public class Picture extends HttpServlet {
      public void doPost(HttpServletRequest request,
      					 HttpServletResponse response)
      {
        String picturefile = request.getParameter("picturefile");
        File f = new File("C:\\Documents and Settings\\Sébastien\\Mes documents\\Photos\\Japon\\Tokyo\\" + picturefile);
        FileInputStream fis = new FileInputStream(f);
        ByteArrayOutputStream boss = new ByteArrayOutputStream();
        byte[] tabb = new byte [f.length()];
        fis.read(tabb);
        try {
    	  response.setContentType("image/jpeg");
    	  OutputStream o = response.getOutputStream();
    	  o.write(tabb);
    	  o.flush();
          o.close();
    	} catch (Exception e) {
    	  e.printStackTrace();
    	}
      }
    }
    Je n'ai pas précisé l'entête content-length, car je n'ai pas trouvé d'exemple l'utilisant.
    Cependant lorsque je compile j'ai un message d'erreur:

    Picture.java:14: possible loss of precision
    found : long
    required : int
    byte[] tabb = new byte [f.length()];
    ^
    1 error
    J'ai essayé de corriger l'erreur en utilisant un cast : (int) f.length(); mais cela ne fonctionne pas.
    Je ne vois pas trop ce que je peux faire, si vous avez une piste je suis preneur.

    Merci d'avance, mumu27!

  2. #2
    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
    rempalce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] tabb = new byte [f.length()];
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    response.setContentLength((int)f.length());
    byte[] tabb = new byte[4096];
    et déplace dans le try

  3. #3
    Membre habitué Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 213
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    je vous remercie pour vos réponses, désormais j'arrive à compiler. 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
     
    package web;
     
    import javax.servlet.http.*;
    import java.io.*;
     
    public class Picture extends HttpServlet {
      public void doPost(HttpServletRequest request,
      					 HttpServletResponse response)
      {
        String picturefile = request.getParameter("picturefile");
        File f = new File("C:\\Documents and Settings\\Sébastien\\Mes documents\\Photos\\Japon\\Tokyo\\" + picturefile);
        try {
    	  FileInputStream fis = new FileInputStream(f);
    	  ByteArrayOutputStream boss = new ByteArrayOutputStream();
    	  response.setContentLength((int)f.length());
    	  byte[] tabb = new byte[4096];
    	  fis.read(tabb);
    	  response.setContentType("image/jpeg");
    	  OutputStream o = response.getOutputStream();
    	  o.write(tabb);
    	  o.flush();
          o.close();
    	} catch (Exception e) {
    	  e.printStackTrace();
    	}
      }
    }
    Voici le code de la page html qui envoie les données à la servlet:

    [CODE]
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Nom du fichier image</title>
    </head>

    <body>
    <h1>Nom du fichier image</h1>

    Veuillez entrer le nom du fichier contenant l'image
    <form action="/Ch05_04/Picture" method="POST">
    <p><input type="text" name="picturefile" length="40">
    <p><input type="submit" name="Valider">
    </form
    </body>
    </html>[CODE]

    J'ai encore un souci pour afficher l'image, par exemple quand j'appelle ma page html, je lui rentre un nom d'image ex
    Pouss-Pouss.jpg
    , mais rien ne s'affiche, juste le nom de l'URL. Peut-être ai-je oublié quelque chose dans la servlet, en tout cas le chemin d'accès est le bon pour l'image. Si vous avez une idée je suis preneur.

    Merci d'avance, mumu27!

  4. #4
    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
    est ce que tu as une erreur ?
    si oui montre nous les logs

  5. #5
    Membre habitué Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 213
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    oui en effet, il y'a une erreur que j'ai essayé de corriger, mais cela n'a pas marché.

    Voici le nouveau programme java, j'ai simplement modifié le nouveau chemin d'accès de l'image et compilé mon .java:

    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
    package web;
     
    import javax.servlet.http.*;
    import java.io.*;
     
    public class Picture extends HttpServlet {
      public void doPost(HttpServletRequest request,
      					 HttpServletResponse response)
      {
        String picturefile = request.getParameter("picturefile");
        File f = new File("C:\\J2EE\\" + picturefile);
        try {
    	  FileInputStream fis = new FileInputStream(f);
    	  ByteArrayOutputStream boss = new ByteArrayOutputStream();
    	  response.setContentLength((int)f.length());
    	  byte[] tabb = new byte[4096];
    	  fis.read(tabb);
    	  response.setContentType("image/jpeg");
    	  OutputStream o = response.getOutputStream();
    	  o.write(tabb);
    	  o.flush();
          o.close();
    	} catch (Exception e) {
    	  e.printStackTrace();
    	}
      }
    }
    Aussi voici le message du log:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [#|2009-12-28T09:29:52.859+0100|WARNING|sun-appserver-pe8.1_02|javax.enterprise.tools.launcher|_ThreadID=10;|LAUNCHER005 : Des espaces ont été détectés dans le chemin daccès. Le format du chemin doit rester homogène (par ex. C:\Program Files\Java\jdk1.5.0\bin; ) sinon le serveur dapplications ne pourra pas démarrer ni sarrêter.  La présence de guillemets et despaces dans le chemin peut générer des problèmes. Le lanceur supprimera donc tous les guillemets avant dappeler le processus. La solution la plus simple est encore de supprimer tous les espaces du chemin daccès avant de démarrer les composants du serveur dapplications.|#]
    J'ai bien essayé de supprimer les espaces (Chemin d'accès "C:\J2EE"), mais rien n'y fait. J'avoue que je ne comprends pas trop. Si quelqu'un a une idée je suis preneur.

    Merci d'avance, mumu27!

  6. #6
    Membre habitué Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 213
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    je reviens sur ce post, car j'ai pu résoudre le problème en m'y attelant un peu.
    En fait, j'avais simplement oublier de mettre à jour le .class sous le projet dans l'outil de déploiement du serveur java sun J2EE En effet chaque modification de fichier doit être répercuté. Pour Tomcat c'est différent.
    Sinon, voici le programme final, un tout petit peu modifié pour pouvoir avoir la taille de tableau qui faut.

    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
    package web;
     
    import javax.servlet.http.*;
    import java.io.*;
     
    public class Picture extends HttpServlet {
      public void doPost(HttpServletRequest request,
      					 HttpServletResponse response)
      {
    	String picturefile = request.getParameter("picturefile");
    	File f = new File("D:\\J2EE\\" + picturefile);
        try {
    	  FileInputStream fis = new FileInputStream(f);
    	  response.setContentLength((int)f.length());
    	  int taille = (int) f.length() * 8;
    	  byte[] tabb = new byte[taille];
    	  fis.read(tabb);
    	  response.setContentType("image/jpeg");
    	  OutputStream o = response.getOutputStream();
    	  o.write(tabb);
    	  o.flush();
          o.close();
    	} catch (Exception e) {
    	  e.printStackTrace();
    	}
      }
    }

    Un grand merci à link256 qui m'a beaucoup aidé et sans qui je n'y serai pas arrivé.

    mumu27

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

Discussions similaires

  1. [Turbo Pascal] Charger une image dans un tableau de pixels
    Par nelbardi dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 16/04/2009, 22h41
  2. Réponses: 9
    Dernier message: 19/03/2007, 10h46
  3. [HTML] Charger une page dans un tableau? Possible?
    Par mec.nimois dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/10/2005, 11h32
  4. ligne blanche sous une image dans un tableau
    Par spikelille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/09/2005, 18h24
  5. Charger une image dans un thread
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2005, 17h36

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