2017-02-22 203 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>