我发现了从db/bob检索图像的非常好的解决方案,这要归功于如何在JSP页面中检索和显示数据库中的图像?
但这个解决方案在每个映像请求上都使用JDBC连接。
我使用的是Spring3注释和Hibernate 3。
我试着用我的"imageService"做类似的事情,它是由ImageServlet类中的注释自动连接的,但我得到了nullPointerException,这意味着可能imageService不是由依赖注入设置的。
有什么办法解决这个问题吗?我不喜欢在映像请求时建立单个jdbc连接。
我希望您将图像作为BLOB类型存储在表中(如果不尝试这样做,因为这是最佳实践)。假设您有一个Person
类,其中包含存储在DB中的人员的image
。如果你想映射它,只需在你的个人POJO中添加一个保存图像的属性。
@Column(name="image")
@Blob
private Blob image;
显示时,将其转换为byte[]
并显示。
private byte[] toByteArray(Blob fromImageBlob) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
return toByteArrayImpl(fromImageBlob, baos);
} catch (Exception e) {
}
return null;
}
private byte[] toByteArrayImpl(Blob fromImageBlob,
ByteArrayOutputStream baos) throws SQLException, IOException {
byte buf[] = new byte[4000];
int dataSize;
InputStream is = fromImageBlob.getBinaryStream();
try {
while((dataSize = is.read(buf)) != -1) {
baos.write(buf, 0, dataSize);
}
} finally {
if(is != null) {
is.close();
}
}
return baos.toByteArray();
}
你可以看到下面的例子来了解更多关于它
- http://i-proving.com/2006/08/23/blobs-and-hibernate
- http://snehaprashant.blogspot.com/2008/08/how-to-store-and-retrieve-blob-object.html
- http://viralpatel.net/blogs/2011/01/tutorial-save-get-blob-object-spring-3-mvc-hibernate.html
正如你所看到的,有多种方法可以做到这一点。选择一个适合你的。