我有一个表,其中图像以 BLOB 形式存储。我正在使用 JPA/Hibernate。图像被映射到类型为 blob 的 bean 字段。现在,我的 Spring Controller 将整个 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上显示所有图像。
最佳答案
<img src>
必须指向一个 URL,而不是 toString()
某些 blob 对象的表示。网络浏览器无法理解如何下载它,并且最终会出现 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很接近,但并非所有现代浏览器都完全支持。
另请参阅:
- How to retrieve and display images from a database in a JSP page? - 这显示了“原始 JDBC”示例,但 JPA/Hibernate 的想法是相同的;只需获取
byte[]
或InputStream
以某种方式存储数据库并将其写入OutputStream
设置必要的响应 header 后的响应,以便浏览器了解如何处理它。
关于java - 检索时图像不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441421/