2017-02-22 2 views
0

Hallo Ich möchte ein Bild in einer JSP anzeigen und in der Lage sein, es innerhalb div, Klassen, hoffentlich als Bild ej: <img src="image from MySQ">.Wie Bild von MySQL (BLOB) in JSP anzeigen?

Ich habe den folgenden Code, aber es zeigt das Bild im Vollbildmodus.

<%Class.forName("com.mysql.jdbc.Driver").newInstance(); 
conn = DriverManager.getConnection(url, login, password); 
statement = conn.createStatement(); 
rs = statement.executeQuery("SELECT photo FROM contacts where contact_id='1'"); 
try { 
    if (rs.next()) { 
     response.setContentType("image"); 
     InputStream is = rs.getBinaryStream(1); 
     OutputStream aux = response.getOutputStream(); 
     out.println("jajaja"); 
     byte[] buffer = new byte[4096]; 
     for (;;) { 
      nBytes = is.read(buffer); 
      if (nBytes == -1) { 
       break; 
      } 
      aux.write(buffer, 0, nBytes); 
     } 
     is.close(); 
     aux.flush(); 
     aux.close(); 
    } else { 
     throw new SQLException("image not found"); 
    } 
    rs.close(); 
} catch (SQLException e) { 
    out.println("Imagen no encontrada"); 
} 
out.println("no se muestra");%> 

Antwort

0

Es tut genau das, was Sie zu tun hatten. Sie legen den gesamten Inhaltstyp der Antwort auf "image" fest und schreiben dann das Bild in die Ausgabe. Stattdessen müssen Sie HTML-Seite mit „text/html“ Inhaltstyp zurück, die aussehen wie:

<html> 
    <body> 
    <h1>My Image from DB</h1> 
    <div> 
     <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgWETRHHFIDIDIDCNCNNRRLKJPPDJDdjfSSS==" alt="My Image from DB" /> 
    </div> 
    </body> 
</html> 

zu tun, dass Sie die nächsten Schritte folgen müssen:

  1. Ihre Bildquelle abrufen (BLOB) von DB
  2. Encode es Base64
  3. erstellen sie Ihre HTML-Seite mit eingebetteter Bildquelle und es in Reaktion
zurückzuschicken

BTW, es gibt einen besseren Weg - Sie können Ihr Bild in eine Datei in einigen Staging-Verzeichnis auf Ihrem Web-Server setzen und nur einen Link wie alle anderen statischen Bilder weitergeben. Es spart Ihnen Verkehr und Seitenladezeit für den nächsten Anruf auf das gleiche Bild. Mit eingebetteter Quelle wird das gesamte Bild jedes Mal übertragen, während es sowohl auf dem Server als auch im Browser zwischengespeichert werden kann.

Sie müssen nur einen Mechanismus erstellen, um diese temporäre Bilddatei zu ersetzen, wenn das Bild in der Datenbank aktualisiert wurde (ändern Sie einfach keinen Namen dieser gecachten Datei).
Rest wird vom Webserver erledigt.

Wenn der Browser nach einer Ressource (Bild) fragt, sendet er den Zeitstempel der Kopie im Cache, , wenn der Zeitstempel derselbe ist wie der Server Server "304 - nicht modifiziert" zurückgibt und der Browser Bild aus dem Cache verwenden kann . Wenn es älter als neue Version kehrt vom Server ...

0

Dies ist mein Code:

<%@ page import="java.sql.*" %> 
<%@ page import='java.io.InputStream' %> 
<%@ page import='java.io.OutputStream' %> 
<% 
    String login = "root"; 
    String password = "secret"; 
    String url = "jdbc:mysql://localhost/test"; 
    Connection conn = null; 
    Statement statement = null; 
    ResultSet rs = null; 
    int nBytes = 0; 
%> 
<html> 
    <body> 
     <% 
         Class.forName("com.mysql.jdbc.Driver").newInstance(); 
         conn = DriverManager.getConnection(url, login, password); 
         statement = conn.createStatement(); 
         rs = statement.executeQuery("SELECT photo FROM contacts where contact_id='1'"); 
         try { 
          if (rs.next()) { 
           response.setContentType("image"); 
           InputStream is = rs.getBinaryStream(1); 
           OutputStream aux = response.getOutputStream(); 
           out.println("jajaja"); 

           byte[] buffer = new byte[4096]; 
           for (;;) { 
            nBytes = is.read(buffer); 
            if (nBytes == -1) { 
             break; 
            } 
            aux.write(buffer, 0, nBytes); 
           } 
           is.close(); 
           aux.flush(); 
           aux.close(); 
          } else { 
           throw new SQLException("image not found"); 
          } 
          rs.close(); 
         } catch (SQLException e) { 
          out.println("Imagen no encontrada"); 
         } 
         out.println("no se muestra"); 
        %>  
<h1>My Image from DB</h1> 
    <div> 
     <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgWETRHHFIDIDIDCNCNNRRLKJPPDJDdjfSSS==" alt="My Image from DB" /> 
    </div> 
     <p> Imagen</p> 
     <a href="index.html">PRINCIPAL</a> 
    </body> 
</html>