在img标签显示图像存储在数据库BLOB(Display image in img tag stor

2019-10-29 15:50发布

我无法显示BLOB ,我在图像mysql保存。 我有豆类,JSP。 我用3multy层架构,我想显示所有图片中的产品。

在acceesor:

 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)

Answer 1:

你看到的是结果Blob.toString() 由于它的二进制内容时,JVM不能真正弄清楚一个不错的表现。

你应该做的是创建一个单独的Servlet,仅检索Blob从数据库和流其内容response.getOutputStream() 在你的JSP,添加一个<img>其标签src -attribute指向Servlet你刚才写的。

Servlet应一次读一个产品的形象,所以查询将略有不同:它应该是足有

String sql = "SELECT pic FROM products where pk = " + pk;

请注意,您需要指定此pk使用一些请求参数变量。 上面的代码行是只是为了演示的想法的例子。 这是非常不安全的请求URL逐字复制到一个SQL查询。 谷歌为“SQL注入”阅读更多关于这一点。

使用Blob.getInputStream()你可以得到InputStream其内容你可以复制到response.getOutputStream()以便将其写回浏览器。 不要忘记设置相应的content-type上的反应,如“图像/ JPG”的JPEG图片的情况。



Answer 2:

正如mthmulders说,你看到的是Blob.toString()的值。

BalusC某个时候发布前就从服务通过servlet数据库博客recpvered图像的2篇大文章:

http://balusc.blogspot.fr/2007/04/imageservlet.html

而更近的一个用gzip和恢复处理

http://balusc.blogspot.fr/2009/02/fileservlet-supporting-resume-and.html



文章来源: Display image in img tag stored as BLOB in database