0

URI エンコードされた画像を jpg 形式に変換できません (png は問題なく動作します)。私のクライアント側は単純な jquery ajax 投稿です。サーバーでは、画像をデコードし、サイズを変更して、ブロブストアに追加しようとしています。私は現在 JQuery を学んでいるので、問題がクライアント側にある場合は、私のために黙ってください。ありがとうございました。

クライアント:

function send(target){

                var sendInfo = { 
                            team: localStorage.getItem("teamName"),
                            name: target,
                            imagedata: image
                        };


                $.mobile.loading( 'show', {
                    textVisible: false,
                    theme: 'z',
                    html: ""
                });

                $.ajax({
                    type: "POST",
                    url: "/UploadImage",
                    data: sendInfo
                    }).done(function(data) {
                        $.mobile.loading('hide');
                    })
                    .fail(function(data) {
                        $.mobile.loading('hide');
                });

サーバ:

public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws IOException {
        try {

        String team = req.getParameter("team");
        String name = req.getParameter("name");
        String imageData = req.getParameter("imagedata").replaceAll("data:image/[a-z]*;base64,", "");
        System.err.print("ImageData: " + imageData);

        Image image = ImagesServiceFactory.makeImage(Base64Utils.fromBase64(imageData));
        System.out.println(image.getHeight() + " : " + image.getWidth());

        } catch (Exception e) {
            e.printStackTrace();
        }
}

テストケース:

ImageData(JPEG): data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4QBYRXhpZgAATU0AKgAAAA...
RETURNS: java.lang.IllegalArgumentException: imageData must be a valid image
ImageData(PNG): data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAIAAABAH0oBAAAAA3NCS...
RETURNS: 720 : 1280 (i.e. it's working)
4

2 に答える 2

0

この回避策は、開発では機能しますが、本番環境では機能しません。sun.misc.BASE64Decoder() は制限されています。

String base64encJPG = (String)req.getParameter("imagedata").replaceAll("data:image/[a-z]*;base64,", "");  
        byte decoded[] = new sun.misc.BASE64Decoder().decodeBuffer(base64encJPG);  
        InputStream in = new ByteArrayInputStream(decoded);  
        BufferedImage bufferedImage = ImageIO.read(in);  
        System.out.println(bufferedImage.getHeight() + " : " + bufferedImage.getWidth());
于 2013-06-10T01:07:19.290 に答える
0

appengine を使用している場合は、Apache Commons ライブラリを使用できます

public byte[] decode(final byte[] bytes) {
    return org.apache.commons.codec.binary.Base64.decodeBase64(bytes);
}
于 2013-06-10T03:50:54.930 に答える