XMLデータをAS3で圧縮し、JavaのGoogle App Engineサーブレットで検証し、Google Cloud Storageのファイルに保存する必要があります。その後、そのファイルはAS3クライアントによって開かれ、解凍されます。プロセスは、単純なXMLやテキストで処理すると機能しますが、ByteArray#でデータを圧縮すると、ByteArray#で "データを解凍する際にエラーが発生しました"というメッセージが表示されます。バイナリデータをAS3からJava経由でファイルシステムに送信するにはどうすればいいですか?
コンテンツタイプとMIMEタイプをBase64でエンコードするだけでなく、さまざまな点で設定しようとしましたが、すべての試みが違っているように見えます。同じXMLを返送することはありません。私はマルチパートを使う必要がありますか?私はサーバーで圧縮する必要がありますか?これを行うベストプラクティスは何ですか?
AS3からデータを送信:
// compress xml using zlib
var xml:XML = <contents><thing>value</thing></contents>;
var bytes:ByteArray = new ByteArray();
bytes.writeObject(xml);
bytes.position = 0;
bytes.compress();
var request:URLRequest = new URLRequest(url);
var urlVariables :URLVariables = new URLVariables();
urlVariables.filename = "somefile.bin";
urlVariables.contents = bytes;
request.data = urlVariables;
request.method = URLRequestMethod.POST;
loader = new URLLoader();
loader.load(request);
Javaサーブレットでそれを受信して、ファイルの作成:ここで
var url :String = "http://commondatastorage.googleapis.com/bucketname/somefile.bin";
var request:URLRequest = new URLRequest(url);
request.method = URLRequestMethod.GET;
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, handleComplete);
loader.load(request);
protected function handleComplete (event:Event):void {
var bytes:ByteArray = new ByteArray();
bytes.writeObject(event.target.data);
// dies on this line with "There was an error decompressing the data."
bytes.uncompress();
var xml:XML = new XML(new String(bytes));
trace(xml);
}
解凍を解除する前にtry bytes.position = 0と入力してください。 –
ありがとうございましたが、助けませんでした。私は、圧縮の直後に、そして復元の直前に、バイトの値を印刷しようとしました。半分のシンボルが疑問符に置き換えられました。エンコードされている必要がありますか? –
おそらく、私は、サーバーに送信されているデータを見て(httpfox)、返されているものと比較します。 –