GWT - 来自数据库的图像

2022-09-02 21:57:54

我实际上正在开发一个基于GWT的网站。现在,我被困在如何显示存储在我网站上的数据库中的图像上。

基本上,我的数据库中有一个字节数组,我使用休眠来获取它。现在我应该创建一个...标记出该数据,但我不知道如何

我在Java和Hibernate中使用GWT


答案 1

这是解决方案。首先,您应该使用 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); 
} 

答案 2

我不知道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();

推荐