Partage
  • Partager sur Facebook
  • Partager sur Twitter

[J2EE - JSP]Afficher une image (byte[]) dans une JSP

The image “https://... cannot be displayed because it conta

Sujet résolu
    21 septembre 2011 à 12:55:57

    Bonjour bonjour,

    J'ai un léger problème avec ma JSP. Je voudrais y afficher une image, provenant de ma BDD oracle.

    Voic comment je récupères l'image :

    InputStream in = rs.getBinaryStream("PHOTO_HOLDER");
    
    if (in != null) {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
    
        while ((in.read()) > -1) {
            out.write(in.read());
        }
        ecd.setPhoto(out.toByteArray());
        in.close();
    }
    


    A savoir que le champ PHOTO_HOLDER est de type LONGRAW (et je ne peux pas changer ça).

    Ensuite, dans ma JSP, j'ai ceci :
    <img src="${pageContext.request.contextPath}/getPhotoEId.do">
    


    Et l'action correspondante :

    public class GetPhotoEIdAction extends Action {
    	private Logger logger = (Logger) Logger.getLogger(GetPhotoEIdAction.class);
    
    	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    
    		ActionMessages errors = new ActionMessages();
    		ActionForward forward = new ActionForward();
    		HttpSession session = request.getSession();
    		
    		CustomerCrmView customerCrmView = (CustomerCrmView) session.getAttribute(Constants.CUSTOMER_CRM);
    
    		byte[] photo = null;
    
    		if (customerCrmView.getEIdCardDTO() != null) {
    			photo = customerCrmView.getEIdCardDTO().getPhoto();
    			if (photo != null){
    				response.setContentType("image/jpeg");
    				response.setContentLength(photo.length);
    				ServletOutputStream o = response.getOutputStream();
    		        o.write(photo, 0, photo.length);
    		        o.flush();
    		        o.close();
    			}
    			
    		}
    		
    		return null;
    	}
    }
    


    Je passe bien par l'action quand je vais sur la JSP, et photo contient bien un array de bytes rempli :

    [-40, -32, 16, 70, 70, 1, 1, 44, 44, 0, -37, 67, 18, 13, 13, 18, 14, 20, 18, 27, 29, 24, 27, 39, 32, 64, 68, 63, 62, 71, 102, 71, 97, 61, 89, 90, 105, 114, 114, 85, -122, 111, 102, 114, -1, 0, 8, -56, -116, 1, 0, -60, -46, 0, 5, 1, 1, 1, 0, 0, 0, 0, 2, 4, 6, 8, 10, 16, 2, 3, 2, 3, 5, 4, 0, 125, 2, 0, 17, 18, 49, 6, 81, 7, 113, 50, -111, 8, 66, -63, 82, -16, 51, 114, 9, 22, 24, 26, 38, 40, 42, 53, 55, 57, 67, 69, 71, 73, 83, 85, 87, 89, 99, 101, 103, 105, 115, 117, 119, 121, -125, -123, -121, -119, -110, -108, -106, -104, -102, -93, -91, -89, -87, -78, -76, -74, -72, -70, -61, -59, -57, -55, -46, -44, -42, -40, -38, -30, -28, -26, -24, -22, -14, -12, -10, -8, -6, -38, 8, 1, 0, 0, 40, -118, -94, 40, -118, -94, 40, -118, -92, -86, 44, 61, 122, -18, 50, 21, -82, -62, 81, 118, -109, -47, -17, -82, -48, -98, -61, 48, 74, 122, 69, 81, 20, 84, -17, 72, -74, 123, -20, -128, -46, -18, 89, -55, 87, -67, 48, 115, 36, -128, 2, 78, -83, -116, -1, 74, 29, -95, 101, -28, -93, 79, -104, 69, 102, -4, 59, -43, 43, -117, 5, -123, 51, 60, -123, 81, 21, 85, 22, -37, -53, 10, -122, 110, -31, -91, -89, -106, -42, 114, -102, 16, -112, -51, 103, -69, 41, -45, 117, 72, -102, 96, 13, -11, 86, 41, -99, 94, -124, -71, -19, 93, -115, 94, 36, -16, -88, 61, 79, 20, 92, -86, 119, -104, -109, 100, 30, 100, -79, 96, -120, -90, 0, 106, 111, 56, -92, -109, -102, 115, 68, 9, -12, 92, -77, -21, 62, -50, -51, -36, 60, 112, -106, 123, -21, 87, 69, 81, -86, -38, -58, -47, -7, -50, -87, -12, 58, 41, -89, -98, 5, 15, 108, -9, -104, 6, -50, -11, 72, -4, -90, -61, 18, -70, -6, 55, 88, 96, 61, -85, -94, 40, 110, 88, 73, -114, 60, -128, 73, -51, 103, 56, 78, 9, 16, 72, 113, -58, 117, -87, -126, 55, -46, 81, -95, -104, 54, 90, -10, -40, -92, 36, 110, 74, -43, 22, 125, 100, 111, 94, 7, 13, -115, 20, 69, -54, -4, 0, 78, 118, -116, -68, 127, -47, 124, -25, 85, -62, -1, 72, 32, -69, -86, 13, 102, -57, -74, 67, 98, -55, -108, 59, -74, -18, -117, -107, -36, -9, 86, -59, 73, -60, 53, -20, 73, 25, 54, -41, -51, -73, -119, -51, -42, 122, 106, 43, -123, 115, -11, 116, 97, 86, -122, 35, -125, -98, -64, 17, 107, -94, 43, -13, 22, 6, 6, -55, 86, -105, 121, 77, 80, -30, -59, -112, 14, -88, -93, -15, 42, -125, -111, 76, 25, -76, -56, 56, -4, -75, -98, -22, -112, -58, 60, -111, 94, 30, 36, 79, -124, 6, -109, -116, 123, -35, 115, -100, -105, -106, -18, -72, 85, -105, -31, 78, 71, 60, 108, 44, -97, 0, -45, 21, -92, 65, -32, 24, -91, -37, -52, 4, -46, 95, -101, -121, -13, -32, -29, -41, 23, -32, 79, -5, -86, 64, 2, 107, -122, -102, -110, -107, -59, -118, 34, 53, -3, 12, -2, 4, 71, -14, -29, 6, 27, 119, 25, 1, 0, 115, -11, 66, 26, -125, -128, 120, 127, 70, 7, 36, -90, -1, 10, 51, 99, 127, 35, -43, 58, -116, 37, -82, 3, 5, 57, 8, 13, 92, -104, -126, -27, -56, -23, -110, -28, 80, -126, -90, 110, 9, -46, 0, -73, -80, -105, -72, 49, -102, -92, 121, 78, -114, 99, -77, 97, -57, -116, -83, 8, 102, 112, -61, -56, -115, 86, -8, 112, -43, -110, 67, 77, -34, -115, -70, -113, 33, 64, 89, -56, -20, 48, 33, -71, -36, -104, -118, 88, -126, 61, -28, 67, 28, 20, -101, 57, 63, 77, -42, -62, 121, 70, 94, -75, 35, 30, -73, -104, -101, 7, 108, 92, -118, -88, 89, -6, 60, 53, 34, 76, -32, -127, 74, -100, -44, -54, -83, -69, 50, -111, -87, -86, 49, 63, 110, 66, -111, 73, -126, -127, 14, 90, 82, -119, -3, -40, -87, -25, -20, 55, 119, 86, -89, -89, -3, 90, 96, -83, -102, -50, -76, 88, 94, -114, 98, 99, 81, -65, 74, -107, 40, 24, 96, -47, 35, 117, -61, -42, -89, -106, -46, -107, -41, -13, 85, 28, -45, 46, 33, -102, -70, -95, -117, -71, -87, 100, -10, 50, -121, 26, 73, 88, -6, -62, 76, -25, 40, 57, 68, 12, -116, 29, -23, 122, 76, 42, 63, -36, 109, 30, -82, 24, 125, 106, 20, 69, -8, -30, 116, 86, -13, -123, -22, -102, -126, -51, 71, 80, 30, 110, -125, 24, 42, -69, -111, 24, -94, -114, 99, -33, -21, 1, 84, -71, 80, -100, 8, 76, 38, -123, 20, 25, -77, -72, -75, 98, 110, 6, 73, 36, -16, -83, -60, -30, 72, -27, -127, -9, -57, -82, -118, -94, -27, 113, -106, -120, -52, -104, -41, -2, -79, -85, -71, -119, 21, 28, 72, 60, -109, -50, 106, 44, 84, -102, -110, 27, -27, 91, 119, 71, -21, -122, 1, -116, -127, 2, -46, -71, -2, -51, -72, 88, 44, 5, 88, -36, -75, -121, -69, -10, -81, 70, -127, 70, 104, -80, -15, -97, -19, 89, -23, -64, -99, -34, -50, -113, -84, 19, -30, 113, -91, -105, 83, -53, 78, -99, -110, -44, -46, 87, -57, 6, 99, 105, -97, 82, -57, 123, -56, 14, 125, 66, 71, 105, 106, 56, -39, 80, 10, 102, 106, -56, -109, -85, 83, -102, -121, 71, 84, -128, 87, 84, -124, 38, 100, 0, -112, 87, -4, -86, -64, -30, 14, -78, 127, -41, -91, -66, -25, 122, 7, -60, 83, 21, 35, -88, 96, 122, 114, 121, 126, 25, -17, 114, 42, -37, -74, 101, -37, -97, 81, -78, -33, -76, 110, 115, 85, 112, -56, 52, -91, 61, -86, 23, 6, 106, 93, 122, 96, -109, -121, 65, 55, 121, 4, -82, -46, -128, -97, -112, 112, 52, -36, 123, -93, 114, -125, -83, 43, 88, -72, 37, -50, -83, 84, -109, 104, -114, -8, -121, -21, 84, -61, 61, -43, 58, -78, -113, -45, 85, 125, 7, -30, -116, -19, -83, -15, 31, 53, 9, -100, 64, 103, 115, 86, -128, -109, -86, -124, 98, -67, -42, -11, -17, -87, 14, 0, 99, 114, 9, -6, -42, -114, -49, 122, -14, -102, -29, 59, 70, -116, -44, 87, 65, -110, 63, 10, -74, 112, -91, 67, -110, 9, 84, 67, 13, 100, 103, -6, 127, 8, -116, -10, -64, 50, -38, -42, -57, -55, -127, 43, -72, -23, -69, -28, 122, 101, 56, -76, -80, -83, 57, 3, 115, -111, 122, -30, -93, -98, 21, -4, 73, -71, -126, 123, -112, -25, -85, 8, 68, 59, 74, 11, -63, 106, 50, -19, -118, -82, -58, -6, 57, 32, -33, 83, -45, -85, 66, -100, 83, 41, 63, 7, -108, -116, -10, 76, -126, -26, -71, -17, -105, 70, 42, 3, 113, -44, -28, -11, 94, -105, 7, -95, 80, -97, -96, -19, -28, -101, 48, -77, 86, 112, 121, 15, -109, -54, 57, -64, -102, -126, -43, -106, 112, 74, -70, -59, 60, 30, -100, -100, 18, -18, 75, -37, 6, -90, -25, 106, 17, -15, -121, -49, -76, -45, 90, 51, -23, 12, 123, -32, 60, 77, -100, -11, 103, 49, 49, -88, -27, -87, 57, -118, -46, -77, 79, -5, -11, -13, -113, 31, -19, -111, -43, 29, -46, 44, 45, -13, -73, -93, 47, 51, 124, -15, -88, -110, 58, 15, -17, -58, -114, 76, 57, 28, -57, -79, -64, -66, -6, -119, 111, -57, 80, 96, 30, -14, -49, -62, 0, 57, 41, 4, 105, -38, -92, 100, -98, -87, -90, 103, -111, 58, -44, -40, 27, 36, -98, 120, -33, 31, 56, 53, 89, -71, 0, 23, -86, -27, 56, -34, -74, 32, 7, 41, -38, -25, -45, 61, -32, -58, -9, -92, 62, 74, -49, 57, -108, 48, -88, 3, -6, 3, 97, 5, 64, -30, 19, 78, 56, -118, 51, 120, 56, 17, 36, 127, 77, -117, -72, 56, 3, 81, 17, -58, 113, 53, 64, -89, 4, -99, 65, 127, 0, -64, 30, -42, 92, -76, -16, -1, -83, -125, -22, 15, 41, -72, 1, 63, -38, -50, -21, -5, -1, -31, 26, -91, -5, -9, -4, 63, 33, -11, 71, 75, 6, -23, 127, 31, -6, 63, 45, -1, -65, -2, -97, -6, 127, 29, -1, 126, -4, -2, -43, -4, -81, -17, -1, -123, -10, -88, -2, -69, 31, -63, -62, -102, -88, -1, 32, -49, -16, 0, 83, -107, 60, 58, -34, -23, -73, 85, -93, 120, 0, 117, -3, 111, -92, -58, 10, 0, 58, -81, -16, -16, 26, -87, -99, -13, -11, -65, -107, 109, 12, 103, -13, -52, -2, -85, -22, 127, 58, -97, -32, -31, -2, -43, 63, 93, 63, -125, -123, 104, -104, -7, -34, -33, -1, 10, -10, -90, 127, 110, -1, -82, -2, -15, 106, -25, -69, -3, 122, -39]


    Mais rien à faire, ma photo ne s'affiche pas.

    La valeur contenue dans ma BDD a été vérifiée, il s'agit bien d'une image, format JPG...

    Qu'est-ce que j'ai raté ?

    Merci d'avance à ceux qui s'intéresseront à mon problème !
    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2011 à 6:34:15

      Le problème ne viendrait pas du fait que tu passes ça au sein de l'attribut src de la balise <img> ?
      • Partager sur Facebook
      • Partager sur Twitter
        22 septembre 2011 à 7:44:35

        C'est comme ça que je l'ai vu faire sur internet il me semble. Tu ferais comment ?
        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2011 à 8:48:47

          Depuis une JSP j'avais du mal à visualiser à vrai dire. Étant donné que response ne peut avoir qu'un seul type (soit du texte, soit du binaire, mais pas un mélange des deux) , je comprends la séparation du traitement de l'image avec le reste du code, et la présence d'une servlet dédiée à la création de l'image, mais je ne vois pas vraiment bien comment ça se goupille au final.

          J'ai vu des exemples de gars qui le faisaient à partir d'une JSP plutôt qu'à partir d'une servlet, et qui avaient dans leur page finale un lien du type <img src="image.jsp">, mais ce que tu fais là semble plus propre.

          Bref, je continue à chercher, mais a priori pour moi ce que tu fais devrait marcher.
          D'ailleurs au sujet de ton problème, quel est le rendu final ? Que contient le code source de ta page HTML au niveau du tag <img> ? A part l'image, tout le reste de la page s'affiche correctement ?
          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2011 à 9:20:26

            Oui, le reste de la page s'affiche bien. Simplement, j'ai l'icne "d'image cassée" qu'on a quand l'image n'est pas trouvée. Et si je clique dessus et que je mets "voir l'image",ça me dit "The image “https://... cannot be displayed because it contains errors"
            • Partager sur Facebook
            • Partager sur Twitter
              22 septembre 2011 à 9:27:22

              A tout hasard, est-ce que tu as essayé en remplaçant o.write(photo, 0, photo.length); par un simple o.write(photo); ?
              • Partager sur Facebook
              • Partager sur Twitter
                22 septembre 2011 à 9:29:34

                Oui, j'ai commencé par un bête o.write(photo); et tenté par la suite o.write(photo, 0, photo.length); au cas où, sans grand espoir, et sans résultat...
                • Partager sur Facebook
                • Partager sur Twitter
                  22 septembre 2011 à 9:39:05

                  Je n'ai pas le temps aujourd'hui d'y regarder de plus près. Il faudrait être certain de bien cerner d'où vient le problème : actuellement on ne sait pas si c'est la manière dont tu récupères l'image depuis ta BDD qui pose problème, ou la manière dont tu passes le tout dans la réponss HTTP.

                  En attendant, si tu ne trouves pas de solution et si tu ne l'as pas déjà fait, tu peux parcourir ce lien :
                  => http://balusc.blogspot.com/2007/04/imageservlet.html
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 septembre 2011 à 16:33:50

                    Hello,

                    J'ai oublié de préciser que je travaille avec Struts 1.
                    J'ai parcouru ton lien, mais rien vu qui m'aide... Merci quand même.

                    Et en effet, il serait bon de savoir l'origine du problème :s

                    Quelqu'un aurait-il une idée pour vérifier que le tableau de bytes que je récupère représente bien une image jpeg correcte ??
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 septembre 2011 à 16:56:37

                      Salut,

                      Si tu as chrome, essaie de regarder ce que te renvoie le serveur quand tu demandes l'images (dans les outils de developpement, Dans network, tu peux voir la liste des éléments chargés. En cliquant dessus tu auras plus d'info sur ce que tu reçois du serveur (headers http, taille, etc)

                      Si tu as firefox, il y a des plugins genre webdevelopper ou firebug qui te permettront de le faire.


                      Et sinon, un coup de debug dans le code ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 septembre 2011 à 17:00:12

                        Firebug me dit juste "failed to load given URL"

                        Quant au coup de debug dans le code. C'est fait, je constate que j'ai bien un array de bytes, qu'il a l'air rempli, que je passe bien par l'action qui mets ce flux dans la reponse. Que puis vérifier d'autre ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 septembre 2011 à 9:03:45

                          mmmh bizarre pour firebug ... Tu as bien utilisé l'onglet réseau ?

                          Sinon essaie avec chrome, c'est plus complet apparemment, et ça te permet d avoir la réponse directement, pas juste les headers (une exception renvoyée sous forme de texte alors que le browser attend une image ?)

                          PS : Tu étais pas en SINF il y a deux ans toi ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 septembre 2011 à 9:15:40

                            Hahaaaa ! Chrome me dit :

                            "Resource interpreted as Image but transferred with MIME type text/html."

                            Bizarre, je mets pourtant bien response.setContentType("image/jpeg");

                            PS : heu non, pas du tout, je sais même pas ce que c'est...


                            EDIT : bon, j'ai réussi à faire en sorte que le type Mime soit bien jpeg avec response.addHeader("Content-type", "image/jpeg");

                            Donc, je n'ai plus de warning dans chrome, par contre la photo s'affiche toujours pas. Et quand j'inspecte un peu, je constate que mes headers ont l'air correcte (longueur, content-type OK). Par contre, "this request has no response available". Or, la réponse, c'est bien là qu'en principe j'ai envoyé mon array de bytes. Donc comment se fait-il que ce soit vide ???
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 septembre 2011 à 10:57:03

                              Depuis ton IDE, quand tu te mets en mode debug sur le ServletOutputStream (l'objet "o"), si tu poses un breakpoint sur la ligne du flush, que contient-il à ce moment lors de l'exécution, juste après le o.write() ?

                              [Edit] au sujet des en-têtes, histoire ne rien laisser de côté, sur le lien que je t'ai proposé le gars procède ainsi (à adapter avec ton code):
                              response.setContentType(contentType);
                              response.setHeader("Content-Length", String.valueOf(image.length()));
                              response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");
                              

                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 septembre 2011 à 11:14:07

                                o.ob.bb.buff contient l'array de bytes (ob est un OutputBuffer, bb un ByteChunk).

                                Et j'ai ajouté les headers, mais pas de changement. Ils sont définis correctement, mais toujorus pas d'image.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  27 septembre 2011 à 9:29:28

                                  UP, toujours pas su afficher cette fichue image -__-
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 septembre 2011 à 17:23:09

                                    J'avais fait quelque chose de similaire. Curieusement, ça marchait sans que j'ai eu besoin de définir le type MIME.
                                    Souvent, le type est automatiquement définit avec le premier contenu envoyer. Attention à ne pas envoyer de chaines de caractère juste avant l'image.

                                    Voilà ma fonction

                                    @Override
                                    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                                         ServletOutputStream output = resp.getOutputStream();
                                    
                                         // Je recupère mon image à partir d'un fichier (classe java.awt.Image )
                                         Image img = ...
                                    
                                         // On crée un buffer d'image, c'est lui qui sera envoyé au navigateur
                                         BufferedImage bufferImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
                                    
                                         // On remplis le buffer en ressinant le contenu de l'image
                                         Graphics2D g = bufferImage.createGraphics();
                                         g.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), null);
                                         g.dispose();
                                    
                                         // On écrit le contenu du buffer dans le canal de sorti
                                         ImageIO.write(bufferImage, "JPEG", output);
                                    
                                         output.flush();
                                         output.close();
                                    }
                                    



                                    A adapter suivant tes besoin. Le tout est de savoir remplir le BufferedImage
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 septembre 2011 à 21:42:28

                                      Salut,

                                      J'ai essayé de convertir le tableau en image jpeg pour tester mais, j'ai l'impression qu'il y a un petit hic.
                                      Le format n'est pas reconnu.

                                      Voici le code que j'ai utilisé. (sauf erreur de ma part)

                                      String image= "-40, -32, 16, 70, 70, 1, 1, 44, 44, 0, -37, 67, 18, 13, 13, 18, 14, 20, 18, 27, 29, 24, 27, 39, 32, 64, 68, 63, 62, 71, 102, 71, 97, 61, 89, 90, 105, 114, 114, 85, -122, 111, 102, 114, -1, 0, 8, -56, -116, 1, 0, -60, -46, 0, 5, 1, 1, 1, 0, 0, 0, 0, 2, 4, 6, 8, 10, 16, 2, 3, 2, 3, 5, 4, 0, 125, 2, 0, 17, 18, 49, 6, 81, 7, 113, 50, -111, 8, 66, -63, 82, -16, 51, 114, 9, 22, 24, 26, 38, 40, 42, 53, 55, 57, 67, 69, 71, 73, 83, 85, 87, 89, 99, 101, 103, 105, 115, 117, 119, 121, -125, -123, -121, -119, -110, -108, -106, -104, -102, -93, -91, -89, -87, -78, -76, -74, -72, -70, -61, -59, -57, -55, -46, -44, -42, -40, -38, -30, -28, -26, -24, -22, -14, -12, -10, -8, -6, -38, 8, 1, 0, 0, 40, -118, -94, 40, -118, -94, 40, -118, -92, -86, 44, 61, 122, -18, 50, 21, -82, -62, 81, 118, -109, -47, -17, -82, -48, -98, -61, 48, 74, 122, 69, 81, 20, 84, -17, 72, -74, 123, -20, -128, -46, -18, 89, -55, 87, -67, 48, 115, 36, -128, 2, 78, -83, -116, -1, 74, 29, -95, 101, -28, -93, 79, -104, 69, 102, -4, 59, -43, 43, -117, 5, -123, 51, 60, -123, 81, 21, 85, 22, -37, -53, 10, -122, 110, -31, -91, -89, -106, -42, 114, -102, 16, -112, -51, 103, -69, 41, -45, 117, 72, -102, 96, 13, -11, 86, 41, -99, 94, -124, -71, -19, 93, -115, 94, 36, -16, -88, 61, 79, 20, 92, -86, 119, -104, -109, 100, 30, 100, -79, 96, -120, -90, 0, 106, 111, 56, -92, -109, -102, 115, 68, 9, -12, 92, -77, -21, 62, -50, -51, -36, 60, 112, -106, 123, -21, 87, 69, 81, -86, -38, -58, -47, -7, -50, -87, -12, 58, 41, -89, -98, 5, 15, 108, -9, -104, 6, -50, -11, 72, -4, -90, -61, 18, -70, -6, 55, 88, 96, 61, -85, -94, 40, 110, 88, 73, -114, 60, -128, 73, -51, 103, 56, 78, 9, 16, 72, 113, -58, 117, -87, -126, 55, -46, 81, -95, -104, 54, 90, -10, -40, -92, 36, 110, 74, -43, 22, 125, 100, 111, 94, 7, 13, -115, 20, 69, -54, -4, 0, 78, 118, -116, -68, 127, -47, 124, -25, 85, -62, -1, 72, 32, -69, -86, 13, 102, -57, -74, 67, 98, -55, -108, 59, -74, -18, -117, -107, -36, -9, 86, -59, 73, -60, 53, -20, 73, 25, 54, -41, -51, -73, -119, -51, -42, 122, 106, 43, -123, 115, -11, 116, 97, 86, -122, 35, -125, -98, -64, 17, 107, -94, 43, -13, 22, 6, 6, -55, 86, -105, 121, 77, 80, -30, -59, -112, 14, -88, -93, -15, 42, -125, -111, 76, 25, -76, -56, 56, -4, -75, -98, -22, -112, -58, 60, -111, 94, 30, 36, 79, -124, 6, -109, -116, 123, -35, 115, -100, -105, -106, -18, -72, 85, -105, -31, 78, 71, 60, 108, 44, -97, 0, -45, 21, -92, 65, -32, 24, -91, -37, -52, 4, -46, 95, -101, -121, -13, -32, -29, -41, 23, -32, 79, -5, -86, 64, 2, 107, -122, -102, -110, -107, -59, -118, 34, 53, -3, 12, -2, 4, 71, -14, -29, 6, 27, 119, 25, 1, 0, 115, -11, 66, 26, -125, -128, 120, 127, 70, 7, 36, -90, -1, 10, 51, 99, 127, 35, -43, 58, -116, 37, -82, 3, 5, 57, 8, 13, 92, -104, -126, -27, -56, -23, -110, -28, 80, -126, -90, 110, 9, -46, 0, -73, -80, -105, -72, 49, -102, -92, 121, 78, -114, 99, -77, 97, -57, -116, -83, 8, 102, 112, -61, -56, -115, 86, -8, 112, -43, -110, 67, 77, -34, -115, -70, -113, 33, 64, 89, -56, -20, 48, 33, -71, -36, -104, -118, 88, -126, 61, -28, 67, 28, 20, -101, 57, 63, 77, -42, -62, 121, 70, 94, -75, 35, 30, -73, -104, -101, 7, 108, 92, -118, -88, 89, -6, 60, 53, 34, 76, -32, -127, 74, -100, -44, -54, -83, -69, 50, -111, -87, -86, 49, 63, 110, 66, -111, 73, -126, -127, 14, 90, 82, -119, -3, -40, -87, -25, -20, 55, 119, 86, -89, -89, -3, 90, 96, -83, -102, -50, -76, 88, 94, -114, 98, 99, 81, -65, 74, -107, 40, 24, 96, -47, 35, 117, -61, -42, -89, -106, -46, -107, -41, -13, 85, 28, -45, 46, 33, -102, -70, -95, -117, -71, -87, 100, -10, 50, -121, 26, 73, 88, -6, -62, 76, -25, 40, 57, 68, 12, -116, 29, -23, 122, 76, 42, 63, -36, 109, 30, -82, 24, 125, 106, 20, 69, -8, -30, 116, 86, -13, -123, -22, -102, -126, -51, 71, 80, 30, 110, -125, 24, 42, -69, -111, 24, -94, -114, 99, -33, -21, 1, 84, -71, 80, -100, 8, 76, 38, -123, 20, 25, -77, -72, -75, 98, 110, 6, 73, 36, -16, -83, -60, -30, 72, -27, -127, -9, -57, -82, -118, -94, -27, 113, -106, -120, -52, -104, -41, -2, -79, -85, -71, -119, 21, 28, 72, 60, -109, -50, 106, 44, 84, -102, -110, 27, -27, 91, 119, 71, -21, -122, 1, -116, -127, 2, -46, -71, -2, -51, -72, 88, 44, 5, 88, -36, -75, -121, -69, -10, -81, 70, -127, 70, 104, -80, -15, -97, -19, 89, -23, -64, -99, -34, -50, -113, -84, 19, -30, 113, -91, -105, 83, -53, 78, -99, -110, -44, -46, 87, -57, 6, 99, 105, -97, 82, -57, 123, -56, 14, 125, 66, 71, 105, 106, 56, -39, 80, 10, 102, 106, -56, -109, -85, 83, -102, -121, 71, 84, -128, 87, 84, -124, 38, 100, 0, -112, 87, -4, -86, -64, -30, 14, -78, 127, -41, -91, -66, -25, 122, 7, -60, 83, 21, 35, -88, 96, 122, 114, 121, 126, 25, -17, 114, 42, -37, -74, 101, -37, -97, 81, -78, -33, -76, 110, 115, 85, 112, -56, 52, -91, 61, -86, 23, 6, 106, 93, 122, 96, -109, -121, 65, 55, 121, 4, -82, -46, -128, -97, -112, 112, 52, -36, 123, -93, 114, -125, -83, 43, 88, -72, 37, -50, -83, 84, -109, 104, -114, -8, -121, -21, 84, -61, 61, -43, 58, -78, -113, -45, 85, 125, 7, -30, -116, -19, -83, -15, 31, 53, 9, -100, 64, 103, 115, 86, -128, -109, -86, -124, 98, -67, -42, -11, -17, -87, 14, 0, 99, 114, 9, -6, -42, -114, -49, 122, -14, -102, -29, 59, 70, -116, -44, 87, 65, -110, 63, 10, -74, 112, -91, 67, -110, 9, 84, 67, 13, 100, 103, -6, 127, 8, -116, -10, -64, 50, -38, -42, -57, -55, -127, 43, -72, -23, -69, -28, 122, 101, 56, -76, -80, -83, 57, 3, 115, -111, 122, -30, -93, -98, 21, -4, 73, -71, -126, 123, -112, -25, -85, 8, 68, 59, 74, 11, -63, 106, 50, -19, -118, -82, -58, -6, 57, 32, -33, 83, -45, -85, 66, -100, 83, 41, 63, 7, -108, -116, -10, 76, -126, -26, -71, -17, -105, 70, 42, 3, 113, -44, -28, -11, 94, -105, 7, -95, 80, -97, -96, -19, -28, -101, 48, -77, 86, 112, 121, 15, -109, -54, 57, -64, -102, -126, -43, -106, 112, 74, -70, -59, 60, 30, -100, -100, 18, -18, 75, -37, 6, -90, -25, 106, 17, -15, -121, -49, -76, -45, 90, 51, -23, 12, 123, -32, 60, 77, -100, -11, 103, 49, 49, -88, -27, -87, 57, -118, -46, -77, 79, -5, -11, -13, -113, 31, -19, -111, -43, 29, -46, 44, 45, -13, -73, -93, 47, 51, 124, -15, -88, -110, 58, 15, -17, -58, -114, 76, 57, 28, -57, -79, -64, -66, -6, -119, 111, -57, 80, 96, 30, -14, -49, -62, 0, 57, 41, 4, 105, -38, -92, 100, -98, -87, -90, 103, -111, 58, -44, -40, 27, 36, -98, 120, -33, 31, 56, 53, 89, -71, 0, 23, -86, -27, 56, -34, -74, 32, 7, 41, -38, -25, -45, 61, -32, -58, -9, -92, 62, 74, -49, 57, -108, 48, -88, 3, -6, 3, 97, 5, 64, -30, 19, 78, 56, -118, 51, 120, 56, 17, 36, 127, 77, -117, -72, 56, 3, 81, 17, -58, 113, 53, 64, -89, 4, -99, 65, 127, 0, -64, 30, -42, 92, -76, -16, -1, -83, -125, -22, 15, 41, -72, 1, 63, -38, -50, -21, -5, -1, -31, 26, -91, -5, -9, -4, 63, 33, -11, 71, 75, 6, -23, 127, 31, -6, 63, 45, -1, -65, -2, -97, -6, 127, 29, -1, 126, -4, -2, -43, -4, -81, -17, -1, -123, -10, -88, -2, -69, 31, -63, -62, -102, -88, -1, 32, -49, -16, 0, 83, -107, 60, 58, -34, -23, -73, 85, -93, 120, 0, 117, -3, 111, -92, -58, 10, 0, 58, -81, -16, -16, 26, -87, -99, -13, -11, -65, -107, 109, 12, 103, -13, -52, -2, -85, -22, 127, 58, -97, -32, -31, -2, -43, 63, 93, 63, -125, -123, 104, -104, -7, -34, -33, -1, 10, -10, -90, 127, 110, -1, -82, -2, -15, 106, -25, -69, -3, 122, -39";
                                      String [] img= image.split(", ");
                                      byte [] b= new byte[img.length];
                                      for(int i=0; i< img.length; i++){
                                      	b[i]=Byte.valueOf(img[i]).byteValue();
                                             // System.out.println(b[i]);  HardCore debug lol
                                      }
                                      		
                                      		
                                      try {
                                      	BufferedOutputStream buf= new BufferedOutputStream(new FileOutputStream("image.jpg"));
                                      	buf.write(b);
                                      	buf.close();
                                      } catch (FileNotFoundException e) {
                                      	// TODO Auto-generated catch block
                                      	e.printStackTrace();
                                      } catch (IOException e) {
                                      	// TODO Auto-generated catch block
                                      	e.printStackTrace();
                                      }
                                      


                                      Edit: Le code permet de transformer le tableau de byte en une image - nommée "image.jpg" - que je place sur le disque dur.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        30 septembre 2011 à 11:09:35

                                        Hello, suite au message de BestCoder, j'ai fait un autre essai, avec le code suivant :

                                        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new ByteArrayInputStream(photo));
                                        BufferedImage image =decoder.decodeAsBufferedImage() ;
                                        
                                        ServletOutputStream sos = response.getOutputStream();
                                        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
                                        encoder.encode(image);
                                        


                                        Et cela me renvoie une ImageFormatException : Not a JPEG file: starts with 0xd8 0xe0

                                        Il semblerait donc qu'il y ait bien un problème au niveau de la récupération de mes données...

                                        Bon, une idée vient de me venir en rédigeant, je pars tester, j'éditerai au besoin.


                                        EDIT: WOUHOUUUUU !!! Ca y est !!!

                                        C'était bien un problème de récupération d'image, et un problème bien bien débile en plus. Comme quoi, le copier-coller, c'est le mal, on le dira jamais assez !

                                        En faisant ceci, je récupérais un byte sur 2 (vu qu'il y avait 2 in.read(), un seul pris en compte)
                                        InputStream in = rs.getBinaryStream("PHOTO_HOLDER");
                                        
                                        if (in != null) {
                                            ByteArrayOutputStream out = new ByteArrayOutputStream();
                                        
                                            while ((in.read()) > -1) {
                                                out.write(in.read());
                                            }
                                            ecd.setPhoto(out.toByteArray());
                                            in.close();
                                        }
                                        


                                        J'ai donc bêtement remplacé par ceci :

                                        if (in != null) {
                                            ByteArrayOutputStream out = new ByteArrayOutputStream();
                                            int bytePhoto;
                                            while ((bytePhoto = in.read()) > -1) {
                                                out.write(bytePhoto);
                                            }
                                            ecd.setPhoto(out.toByteArray());
                                            in.close();
                                        }
                                        


                                        Et ZBEM ! Ca fonctionne !

                                        Merci à tous ceux qui ont répondu !!!


                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          15 janvier 2018 à 14:56:58

                                          Bonjour  Mon nom est saidou Diallo je suis débutant en j2EE en faite ma question est de savoir comment récupérer un byte dans un servlet pour 

                                          Afficher une image (byte[]) dans une JSP svp aidez moi.

                                          il est de type blob  alors svp aidez moi.

                                          -
                                          Edité par sinthio2 15 janvier 2018 à 15:06:56

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 mars 2018 à 15:20:04

                                            Bonjour Comment recuperer un champs de type input type ="file" voici mon code

                                            <%@page contentType="text/html" pageEncoding="UTF-8"%>
                                            <!DOCTYPE html>
                                            <html>
                                                <head>
                                                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                                                    <link rel="stylesheet" href="pages/bootstrap/css/bootstrap.min.css"/>
                                                    <link type="text/css" rel="stylesheet" href="inc/style.css"/>
                                                    <title>Gestion des categorie</title>
                                                </head>
                                                <body>
                                                    <div id="connexion">
                                                        <form method = "POST" action = "categorie" enctype="multipart/form-data">
                                                            <fieldset>
                                                                <legend>Information Categorie</legend>
                                                                <div class="form-group">
                                                                    <label for="idcategorie"> IDCATEGORIE:</label>
                                                                    <span class="requis">*</span>
                                                                    <input type="text"id="idcategorie" name="idcategorie"/>
                                                                </div></br>
                                                                <div class="form-group">
                                                                    <label for="nomCategory">Name Category</label>
                                                                    <span class="requis">*</span>
                                                                    <input type="text" class="form-control" name="nomcategory"/>
                                                                </div><br />
                                                                <div class="form-group">
                                                                    <label for="exampleFormControlTextarea1">Example textarea</label>
                                                                    <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
                                                                </div>
                                                                <div class="form-group">
                                                                    <label for="titre"> TITRE</label>
                                                                    <span class="requis">*</span>
                                                                    <input type="text" name="titre" class=" form-control" id="titre" placeholder="-----------------"/>
                                                                </div><br />
                                                                <div class="form-group">
                                                                    <label for="exampleFormControlFile1">Example file input</label>
                                                                    <input type="file" class="form-control-file" id="exampleFormControlFile1">
                                                                </div>
                                                            </fieldset>
                                                            <button type="button"class="btn btn-primary">Save changes</button>
                                                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                                                        </form>
                                                    </div>
                                                </body>
                                            </html>
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              7 mars 2018 à 15:09:38

                                              bonjour je suis débutant en java EE voici mon controller je voudrais savoir comment afficher récuperer un champs de type input type="file" dans cette servlet .j'ai poster un code jsp qui est categorie.jsp donc voici le controller aidez svp package gn.niit.infos.custapp.controller;

                                              import com.niit.infos.model.entities.Category;
                                              import java.io.BufferedInputStream;
                                              import java.io.BufferedOutputStream;
                                              import java.io.File;
                                              import java.io.FileOutputStream;
                                              import java.io.IOException;
                                              import java.util.List;
                                              import javax.ejb.EJB;
                                              import javax.servlet.ServletException;
                                              import javax.servlet.http.HttpServlet;
                                              import javax.servlet.http.HttpServletRequest;
                                              import javax.servlet.http.HttpServletResponse;
                                              import javax.servlet.http.HttpSession;
                                              import javax.servlet.http.Part;
                                              import sn.niit.infos.custappaccount.model.session.CustAccountRemoteBean;

                                              /**
                                               *
                                               * @author Diamant
                                               */
                                              public class AjouterCategory extends HttpServlet {
                                               private static final long serialVersionUID = 1L;
                                              /*injection de notre EJB*/
                                                  @EJB
                                                

                                                  CustAccountRemoteBean ma_dao;
                                                  public static final int Taille_tampon = 1024;
                                                  public static final String Chemin_Fichier = "/Mateo/file/img/";

                                                 

                                                  @Override
                                                  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                                                      this.getServletContext().getRequestDispatcher("categorie.jsp").forward(req, resp);
                                                  }

                                                  @Override
                                                  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                                                      // On récupère le champ description comme d'habitude
                                                      String nomcategory = req.getParameter("nomcategory");
                                                      String description = req.getParameter("description");
                                                      String titre = req.getParameter("titre");
                                                      String nomPhoto = req.getParameter("nomPhoto");

                                                      Category cat = new Category();
                                                      cat.setNomcategory(nomcategory);
                                                      cat.setDescription(description);
                                                      cat.setTitre(titre);
                                                      cat.setNomPhoto(nomPhoto);
                                                     
                                                      List<Category> categorie=ma_dao.getAllCategorie();
                                                     
                                                      /*creation d'une session*/
                                                      HttpSession session=req.getSession();
                                                      session.setAttribute("mesCategories", categorie);

                                                      String Message = ma_dao.AddCategory(cat);
                                                      System.out.println(Message);
                                                     
                                                     
                                                     
                                              //       
                                              //        //on recupere champ du fichier
                                              //         Part part = req.getParameter("file");
                                              //        /*on verifie qu'on bien recu un fichier*/
                                              //        String NomPhoto = getNomPhoto(part);
                                              //        //si on a bien un fichier avec une condition if
                                              //        // Si on a bien un fichier
                                              //        if (nomPhoto != null && !nomPhoto.isEmpty()) {
                                              //            String photo = part.getName();
                                              //            // Corrige un bug du fonctionnement de firefox
                                              //            NomPhoto = NomPhoto.substring(nomPhoto.lastIndexOf('/') + 1)
                                              //                    .substring(nomPhoto.lastIndexOf('\\') + 1);
                                              //
                                              //            // On écrit définitivement le fichier sur le disque
                                              //            writeFile(part, nomPhoto, CHEMIN_FICHIERS);
                                              //
                                              //            //req.setAttribute(nomPhoto, nomPhoto);
                                              //        }
                                              //
                                              //        this.getServletContext().getRequestDispatcher("categorie.jsp").forward(req, resp);
                                              //    }
                                              //
                                              //    private void writeFile(Part part, String nomPhoto, String chemin) throws IOException {
                                              //        BufferedInputStream bis = null;
                                              //        BufferedOutputStream bos = null;
                                              //        //int Taille_tampon = 10240;
                                              //        try {
                                              //            bis = new BufferedInputStream(part.getInputStream(), 1024);
                                              //            bos = new BufferedOutputStream(new FileOutputStream(new File(chemin + nomPhoto)), 1024);
                                              //
                                              //            byte[] photo = new byte[1024];
                                              //            int longueur;
                                              //            while ((longueur = bis.read(photo)) > 0) {
                                              //                bos.write(photo, 0, longueur);
                                              //            }
                                              //        } finally {
                                              //            try {
                                              //                bos.close();
                                              //            } catch (IOException e) {
                                              //              
                                              //            }
                                              //            try {
                                              //                bis.close();
                                              //            } catch (IOException e) {
                                              //               
                                              //            }
                                              //        }
                                              //    }
                                              //
                                              //    private static String getNomPhoto(Part part) {
                                              //        for (String contentDisposition : part.getHeader("content-disposition").split(";")) {
                                              //            if (contentDisposition.trim().startsWith("filename")) {
                                              //                return contentDisposition.substring(contentDisposition.indexOf('=') + 1).trim().replace("\"", "");
                                              //            }
                                              //        }
                                              //        return null;
                                                 }

                                              }
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              [J2EE - JSP]Afficher une image (byte[]) dans une JSP

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown