2017-02-22 79 views
0

嗨我想在JSP中显示图像,并能够在div,classs中处理它,希望如图像ej:<img src="image from MySQ">如何在JSP中显示来自MySQL(BLOB)的图像?

我有以下代码,但它显示全屏幕图像。

<%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");%> 

回答

0

它的确如你所说的那样。 您将整个响应内容类型设置为"image",然后将图像写入输出。相反,你必须具有能够像“text/html的”内容类型返回HTML页面:

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

这样做,你必须遵循下面的步骤:

  1. 检索您的图像源(BLOB)从DB
  2. 其编码为Base64
  3. 嵌入图像源创建你的HTML页面,并将其发送回响应

顺便说一句,有一个更好的方法 - 你可以把你的图像放到你的web服务器上的一个staging目录中,并且只要传递一个链接到其它任何静态图像。 它可以节省您下次访问同一图像的流量和页面加载时间。使用嵌入式源代码整个映像将每次传输,而它可以缓存在服务器和浏览器中。

如果图像在数据库中更新(只是不要更改该缓存文件的名称),您只需制作一种机制来替换该临时映像文件。
休息将由网络服务器完成。

一般来说,当浏览器要求资源(图片)时,它会发送缓存中的副本的时间戳, 如果时间戳与服务器的服务器返回时返回“304 - 未修改”并且浏览器可以使用缓存中的图片。如果是旧的然后从服务器新版本的回报......

0

这是我的代码:

<%@ 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>