我无法显示在 mysql
中保存的 BLOB
图像。我有 bean ,jsp。我使用3多层架构,我想用图片显示所有产品。
在访问器中:
try {
Connection cn = getVla().getConnection();
String sql = "SELECT * FROM products";
PreparedStatement pst = cn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
ArrayList<products> ls = new ArrayList<products>();
while(rs.next()) {
products s = new products();
s.setPk(rs.getLong("pk"));
s.setName(rs.getString("name"));
s.setPrice(rs.getDouble("price"));
s.setPic(rs.getBlob("pic"));
s.setComments(rs.getString("comments"));
ls.add(s);
}
return ls;
}
在产品中:
public Blob getPic() {
return pic;
}
在main.jsp中
<%=
List<products> product = bean.getproducts();
%>
<h1>Product: </h1>
<%
for(products c : product) {
%>
From <%= c.getName()%> <br/>
<%= c.getPic()%></b><br/>
<b><%= c.getPrice()%> </b><br/>
<%= c.getComments()%>
<hr/>
<%
}
%>
如何显示图片? (目前我正在显示 com.mysql.jdbc.Blob@2e5f6a64)
最佳答案
您所看到的是 Blob.toString()
的结果。由于它是二进制内容,JVM 无法真正找到一个很好的表示形式。
您应该做的是创建一个单独的 Servlet,仅检索 Blob
从数据库并将其内容流式传输到 response.getOutputStream()
。在 JSP 中,添加 <img>
标签 src
-属性指向Servlet
你刚刚写了。
Servlet
应一次读取一种产品的图像,因此查询会略有不同:应该足以拥有
String sql = "SELECT pic FROM products where pk = " + pk;
请注意,您需要指定此 pk
使用某些请求参数的变量。上面的代码行只是演示该想法的示例。将请求 URL 逐字复制到 SQL 查询中是非常不安全的。 Google 搜索“SQL 注入(inject)”以了解更多相关信息。
使用 Blob.getInputStream()
您可以获得InputStream
您可以将其内容复制到 response.getOutputStream()
以便将其写回浏览器。不要忘记设置适当的 content-type
关于该响应,例如 JPEG 图片的“image/jpg”。
关于java - 在数据库中以 BLOB 形式存储的 img 标签中显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833184/