Java 如何在JSP中显示来自MySQL(BLOB)的图像?
您好,我想在JSP中显示一个图像,并能够在div、classs中处理它,希望是图像ej:Java 如何在JSP中显示来自MySQL(BLOB)的图像?,java,mysql,jsp,Java,Mysql,Jsp,您好,我想在JSP中显示一个图像,并能够在div、classs中处理它,希望是图像ej: 我有以下代码,但它会全屏显示图像 <%Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, login, password); statement = conn.createStatement(); rs = statement.executeQuery("SELECT
我有以下代码,但它会全屏显示图像
<%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>
我的图片来自数据库
图像n