如何从数据库中检索图像并放在JSP上?
我有一个JSP页面,它应该从数据库中获取所有图像,并应显示在一个表上。 我的结果集对象’rs’指向图像。 我的代码是这样的:
String query = "select image from stock"; rst = stmt.executeQuery(query); while(rst.next()) <% %> }
我知道,getString不适用于BLOB类型。 我甚至使用了getBinaryStream(),但没有成功。 任何想法?
这是完整的例子,
注意:仅考虑此示例作为参考,以了解方式,
使用以下代码将Blob转换为byte []:
ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; InputStream in = blob.getBinaryStream(); int n = 0; while ((n=in.read(buf))>=0) { baos.write(buf, 0, n); } in.close(); byte[] bytes = baos.toByteArray();
使用Servlet编写图像:
if (bytes != null && bytes.length > 0) { response.setContentType("image/jpg"); response.getOutputStream().write(bytes); response.getOutputStream().flush(); response.getOutputStream().close(); }
使用jsp中的servlet请求URL来反转您的图像:
https://stackoverflow.com/questions/4332907/how-to-retrieve-images-from-database-and-place-on-jsp/imageDisplayProcess.do?pKey=imageId //should be your image servlet URL
- 创建一个servlet并映射它,比如
/image/*
- 使用
src="image/<%= imageId %>
,其中imageId
是db中每个图像的唯一ID - 在servlet
getBinaryStream()
并将其传递(例如使用IOUtils.copy(..)
)到response.getOutputStream()
- 将
Content-Type
设置为image/jpeg
或image/png
(或任何类型)
只需将响应类型设置为“image / jpg”并使用ResultSet检索列
下面写的演示代码—
if(rs.next()){ int len = imgLen.length(); byte [] rb = new byte[len]; InputStream readImg = rs1.getBinaryStream(1); int index=readImg.read(rb, 0, len); response.setContentType("image/jpg"); response.getOutputStream().write(rb,0,len); response.getOutputStream().flush(); }