0

画像アップロード ウィジェットを作成し、画像を 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.

4

3 に答える 3

0

問題は、B64 の不適切な実装を使用していることです。なんらかの理由で、com.google.appengine.api が提供する実際の B64 は Apache アップローダで動作しません。代わりに、これを使用する必要がありますhttp://iharder.net/base64

于 2013-06-14T00:11:11.390 に答える
0

次のようなことを試しましたか:

HTML html = new HTML("<img src=\""+getImageData's result+"\" alt=\"Foo\">");

または、他の B64 util クラスで試しましたか?

他のオプションは、すべての B64 データの代わりに、DB から URL を生成し、それをイメージに渡すことです (私たちはこれを行っており、うまく機能しています)。

ありがとう、

アドルフォ。

于 2013-06-07T08:16:12.143 に答える