嗨,我想在 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”,然后将图像写入输出。相反,您必须返回具有“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>
为此,您必须执行以下步骤:
- 从数据库检索图像源 (BLOB)
- 将其编码为 Base64
- 创建包含嵌入图像源的 HTML 页面并将其作为响应发回
顺便说一句,有一个更好的方法 - 您可以将图像放入网络服务器上某个暂存目录中的文件中,然后像任何其他静态图像一样传递指向它的链接。 它将节省您下次调用同一图像的流量和页面加载时间。通过嵌入源,每次都会传输整个图像,同时可以将其缓存在服务器和浏览器中。
如果数据库中的图像已更新,您只需制定一种机制来替换该临时图像文件(只需不要更改该缓存文件的名称)。
其余的将由网络服务器完成。
一般来说,当浏览器请求资源(图像)时,它会发送缓存中副本的时间戳, 如果时间戳与服务器相同,则服务器返回“304 - 未修改”,并且浏览器可以使用缓存中的图像。如果它较旧,则从服务器返回新版本...
关于java - 如何在 JSP 中显示来自 MySQL (BLOB) 的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402946/