GWT - 来自数据库的图像
我实际上正在开发一个基于GWT的网站。现在,我被困在如何显示存储在我网站上的数据库中的图像上。
基本上,我的数据库中有一个字节数组,我使用休眠来获取它。现在我应该创建一个...标记出该数据,但我不知道如何
我在Java和Hibernate中使用GWT
我实际上正在开发一个基于GWT的网站。现在,我被困在如何显示存储在我网站上的数据库中的图像上。
基本上,我的数据库中有一个字节数组,我使用休眠来获取它。现在我应该创建一个...标记出该数据,但我不知道如何
我在Java和Hibernate中使用GWT
这是解决方案。首先,您应该使用 com.google.gwt.user.server.Base64Utils.toBase64(byte[]) 对字节数组进行编码。但此方法不适用于 IE 7。IE8有32kb的限制。IE9 没有此限制。
这是服务器上的方法
public String getImageData(){
String base64 = Base64Utils.toBase64(imageByteArray);
base64 = "data:image/png;base64,"+base64;
return base64;
}
这是客户端方法;
@Override
public void onSuccess(String imageData) {
Image image = new Image(imageData);
RootPanel.get("image").add(image);
}
我不知道GWT是如何工作的,尽管你可以映射一个返回resourceStream的servlet/controller。例如,如果您映射一个 servlet “imageViewer” 它采用 imageId 参数,则对 image 的请求将变为
/imageViewer?imageId=1234
休眠对象将具有对 blob 的引用,因此可以返回该引用。UI 上的参考是
<img src="/imageViewer?imageId=1234"/>
更新:您可能无法使用 Model 来返回图像,您需要一个显式控制器或 servlet 来返回流数据。
在 servlet 中,你会做一些类似的事情
// get reference to input stream
InputStream in = hibnerateObject.getImage();
// set MIME type etc
response.setContentType(mimeType);
OutputStream out = response.getOutputStream();
while ((len = in.read(buf)) >= 0)
out.write(buf, 0, len);
in.close();
out.close();