画像アップロード ウィジェットを作成し、画像を GWT データベースに保存して、後で読み取ることができるようにしようとしています。コードは次のとおりです。
サーブレット (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.