1

画像をディスクに保存したいpngデータのjson文字列を送信しています。

jsonInputString= URLDecoder.decode( inputString, "UTF-8" );
jsonInputString= jsonInputString.substring(inputStrjsonInputStringing.indexOf(",")+1);
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(jsonInputString);

サニタイズ後のjsonInputString:

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

結果は

with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
 at javax.xml.bind.DatatypeConverter.parseBase64Binary(DatatypeConverter.java:296)

それはランダムに動作しますが、ランダムに動作させるために時間を費やしてきました.

Web クライアントからの文字列はそのまま表示されます

 jsonInputString = ....toDataURL('image/png');
 jsonInputString = encodeURIComponent(jsonInputString );
 console.log(jsonInputString );

現在のコードが機能しない理由を理解するのに役立つ助けをいただければ幸いです。

更新: JDK 1.6 Eclipse indigo

4

1 に答える 1

1

DatatypeConverter.parseBase64Binary() は、Java SDK 1.6 で 65000 を超えるデータでは機能しません。Java SDK 1.6 を使用して作成したアプレットで parseBase64Binary() を使用しましたが、64K を超えるデータでは常にクラッシュし、小さいデータでは問題なく動作しました。

Java SDK 1.6 に付属の BASE64Decoder を使用できます。

import sun.misc.BASE64Decoder;

そして、次のように使用します。

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);

他のパッケージの追加に問題がない場合は、apache commons Base64.decodeBase64() を使用する必要があります

于 2014-01-16T21:34:05.613 に答える