[英]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>
為此,您必須執行以下步驟:
順便說一句,還有一種更好的方法-您可以將圖像放入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.