我实际上是在做一个基于GWT的网站。现在我被困在如何在我的网站上显示存储在数据库中的图像上。
基本上,我的数据库中有一个bytearray,我使用hibernate获取它。现在我应该创建一个..。标记出数据,但我不知道如何
我在Java和Hibernate中使用GWT
发布于 2010-12-29 19:26:52
以下是解决方案。首先,应该使用com.google.gwt.user.server.Base64Utils.toBase64(byte[])对字节数组进行编码。但是这种方法不适用于IE7,而且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);
}
发布于 2010-12-29 20:11:05
我不知道GWT是如何工作的,尽管您可以映射一个返回resourceStream的servlet/控制器。例如,如果您映射一个采用imageId参数的servlet "imageViewer“,则对图像的请求将变为
/imageViewer?imageId=1234
Hibernate对象会有对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();
发布于 2010-12-29 18:39:46
在GWT中有Image Widget。您不能在客户端执行此操作,但可以调用RPC与服务器进行通信。那么它就是一个简单的CRUD应用程序。在服务器端,使用hibernate连接到数据库,并将图像返回给客户端,或者返回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());
}
就这样。快乐编码
https://stackoverflow.com/questions/4553316
复制相似问题