我正在尝试制作一个图像上传小部件并将图像存储在 GWT 数据库中,以便以后可以从中读取。这是代码:
Servlet(HttpServletRequest 请求)
/* */
iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
InputStream stream = item.openStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
byte[] buffer = new byte[8192];
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, len);
}
Blob content = new Blob(out.toByteArray());
/* */
实体
public class ImageEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated
private Blob image;
/* */
RCP 实施
/* */
public String getImageData(Long id){
EntityManager em = EMF.get();
jtwitter.shared.Image image = em.find(jtwitter.shared.Image.class, id);
Blob blobData = image.getImage();
System.out.println(blobData.getBytes().length);;
byte[] imageData = image.getImage().getBytes();
System.out.println(imageData.length);
String base64 = Base64Utils.toBase64(imageData);
base64 = "data:image/png;base64,"+ base64;
return base64;
}
public String getImageData(Long id){
EntityManager em = EMF.get();
jtwitter.shared.Image image = em.find(jtwitter.shared.Image.class, id);
Blob blobData = image.getImage();
System.out.println(blobData.getBytes().length);;
byte[] imageData = image.getImage().getBytes();
System.out.println(imageData.length);
String base64 = Base64Utils.toBase64(imageData);
base64 = "data:image/png;base64,"+ base64;
return base64;
}
/* */
在客户端,我调用 com.google.gwt.user.client.ui.Image img = new Image( getImageData's result )。我得到的只是一个损坏的图像图标,右键单击它会以字节为单位提供图像代码。我试过比较大小,原始图像大小与 getImageData 方法中读取的大小相同。
感谢阅读,P。