簡體   English   中英

如何在JSP中顯示來自MySQL(BLOB)的圖像?

[英]How display image from MySQL (BLOB) in JSP?

嗨,我想在JSP中顯示圖像,並能夠在div,類中處理它,希望作為圖像ej: <img src="image from MySQ">

我有以下代碼,但它以全屏顯示圖像。

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

它完全按照您的指示去做。 您將整個響應內容類型設置為"image" ,然后將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)
  2. 將其編碼為Base64
  3. 創建帶有嵌入式圖像源的HTML頁面,並將其作為響應發送回去

順便說一句,還有一種更好的方法-您可以將圖像放入Web服務器上某個暫存目錄中的文件中,並像其他任何靜態圖像一樣將鏈接傳遞給它。 它將為您下次訪問同一張圖片節省流量和頁面加載時間。 使用嵌入式源,每次都可以傳輸整個圖像,同時可以將其緩存在服務器和瀏覽器中。

如果數據庫中的映像已更新,則只需建立一種機制來替換該臨時映像文件(只是不要更改該緩存文件的名稱)。
其余的將由Web服務器完成。

通常,當瀏覽器請求資源(圖像)時,它將發送其在緩存中的時間戳,如果時間戳與服務器具有相同的時間戳,則服務器返回“ 304-未修改”,並且瀏覽器可以使用緩存中的圖像。 如果版本較舊,則會從服務器返回新版本...

這是我的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM