GWT – 来自数据库的图像

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

基本上我在我的数据库中有一个bytearray,我使用hibernate获取。 现在我应该从这些数据中创建一个…标签,但我不知道如何

我在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。 例如,如果您映射了一个带有imageId参数的servlet“imageViewer”,那么对图像的请求就会变为

 https://stackoverflow.com/imageViewer?imageId=1234 

Hibernate对象会引用blob,所以你可以返回它。 用户界面将参考

  

更新:您可能无法使用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(); 

GWT中有Image Widget 。 你不能在客户端做它,但你可以调用RPC来与服务器通信。 然后它是简单的CRUD应用程序。 在服务器上使用hibernate连接到数据库并将Image返回给客户端或它的url,并在客户端执行类似的操作:

 @Override public void onSuccess(String imageUrl) { Image image = new Image(imageUrl); RootPanel.get("image").add(image); } @Override public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); } 

就这样。 快乐的编码

我使用了与Gursel Koca建议相同的方法但只能使用Apache Base64库来工作,而不是(具有讽刺意味的)GWT Base64Utils

 String base64 = Base64.encodeBase64String(array); base64 = "data:image/"+type+";base64," + base64; return base64; 

另请注意,如果要更新现有图像或图像占位符,setURL方法将覆盖样式表,因此请务必首先抓取它:

 String styleName = profilePicture.getStyleName(); profilePicture.setUrl(base64String); profilePicture.setStyleName(styleName);