我有一张表格,其中存储的图像为BLOB。我正在使用JPA / Hibernate。映像映射到类型为blob的bean字段。现在我的Spring控制器将整个 bean的列表(这个bean的每个对象都有一个blob对象)返回给我的jsp。我想在那个jsp上显示所有图像。
我尝试在jsp上使用这样的东西:
<c:forEach items="${itemList}" var="item" varStatus="status" >
<img src="<c:out value="${item.image}" />"/><br/> /*<img src="${item.image}"/> */
</c:forEach>
但这不起作用。我没有获取jsp上显示的图像列表,而是获取了类名,当我查看页面源代码时,我看到了类似这样的内容<img src="java.object.serilizableBlob@2134"/>
请帮助我解决问题。如何在同一个jsp上显示所有图像。
答案 0 :(得分:2)
<img src>
必须指向一个网址,而不是某个blob对象的toString()
表示。 webbrowser不会理解如何下载它,它将最终导致HTTP 404错误。
你宁愿最终得到这样的结论:
<img src="url/to/image.png" />
要从数据库动态提供图片,请使用servlet。然后,您应该使用一系列唯一的图像ID /文件名来代替blob列表,这样您的HTML就会像这样结束
<img src="imageservlet/image1.png" />
<img src="imageservlet/image2.png" />
<img src="imageservlet/image3.png" />
这样浏览器可以通过URL下载图像并相应地显示它们。
不,在所有HTML中打印二进制数据都无济于事。 data URI scheme接近,但并非所有现代浏览器都支持此功能。
byte[]
或InputStream
,并在设置了必要的响应标头后将其写入响应的OutputStream
,以便浏览器了解如何处理它。