カテゴリー
未分類

ByteArrayで変数をサーバに送信するの巻

apeirophobia: mx.utils.Base64Encoderでバタバタやっていましたが、nutsuさんのお力添えもあり、無事実装できましたので一応ご報告。
TASK
URLVariablesの中に普通のString等と一緒にByteArrayで化した情報を突っ込んで送ることができるか?またそれをから再度読み込んで復元できるか?
PROCESS
1)Base64エンコーダを探すの巻
ByteArrayの送信の際にBase64でエンコードする必要があるので、その辺のクラスを探してみる。corelibのSHA256クラスの中とかにmx.utils.Base64Encoderというクラスの存在が確認できるのだが、そんなものはどこにも無い。ということで最初はhttp://crypto.hurlant.com/のcom.hurlant.util.Base64クラスを使って実装。一応これでも動く。
ただしが去年で停止しているのとcorelibの中にもcryptoパッケージが移植されているので、できればmx.utils.Base64Encoderで実装してみたいということでモソモソしてみる。
2)Base64Decoderでが出るの巻
nutsuさんからFlex3 の中に入っているという情報を頂き、喜び勇んでゲット。しかしvar bde:Base64Decoder = new Base64Decoder();を行うと

が表示され動作しない。
3)Base64Decoderのエラーを回避するの巻
nutsuさんの環境では動作するということでしばらくググッてhttp://bugs.adobe.com/jira/browse/SDK-12205#action_178148に到達。
ということで以下のを追記。

これでエラーは出なくなった。


4)完成の巻
ということで完成したObjectをbyteArrayしてURLVariablesに突っ込んで送信するスクリプトは以下のような感じ。

ちなみにByteArrayのzlib圧縮をかけた場合とかけない場合のデータの差は以下のような感じ。
1)compressあり

name=aho&history=eNp10K1OA2EQheEOM0zYRVdxAQ2q%2B%2B3%2FupUkvQBaWdEEAwKHQOwGQkKCIE1NVVVdZRUJN7M3wkHU%0A9Zgx5zHzxteiSSzR0%2FJx5ZOh64fu53R%2Fh36dRC%2Br5bONREMsF%2BdEcBPRlKyp25VoRtbM7UY0J2vu%0A1ooWZC3cXkVLspZu3Vy0InPl1t%2BL1mSu3d7wckPmxu19IZch%2Bd9vzyRJ3D4eAAIDiPaZAaQMoNtX%0AC5AxgHTfY4CcAdTb1AAFAwi4nQKUDKDhbgRQMYCK%2BwBQM4COhzuAhgGUPM5E%2FgAfkRQ5&year=100

2)compressなし

name=aho&history=CgsBAzAKAQluYW1lBifjgYLjgbvjgYLjgbvjgb7jgpMwCXllYXIEAAEDMQoBAgYn44GC44G744GC%0A44G744G%2B44KTMQYEAQEDMgoBAgYn44GC44G744GC44G744G%2B44KTMgYECAEDMwoBAgYn44GC44G7%0A44GC44G744G%2B44KTMwYEGwEDNAoBAgYn44GC44G744GC44G744G%2B44KTNAYEQAEDNQoBAgYn44GC%0A44G744GC44G744G%2B44KTNQYEfQEDNgoBAgYn44GC44G744GC44G744G%2B44KTNgYEgVgBAzcKAQIG%0AJ%2BOBguOBu%2BOBguOBu%2BOBvuOCkzcGBIJXAQM4CgECBifjgYLjgbvjgYLjgbvjgb7jgpM4BgSEAAED%0AOQoBAgYn44GC44G744GC44G744G%2B44KTOQYEhVkBBTEwCgECBinjgYLjgbvjgYLjgbvjgb7jgpMx%0AMAYEh2gBBTExCgECBinjgYLjgbvjgYLjgbvjgb7jgpMxMQYEijMBBTEyCgECBinjgYLjgbvjgYLj%0Agbvjgb7jgpMxMgYEjUABBTEzCgECBinjgYLjgbvjgYLjgbvjgb7jgpMxMwYEkRUBBTE0CgECBinj%0AgYLjgbvjgYLjgbvjgb7jgpMxNAYElTgBBTE1CgECBinjgYLjgbvjgYLjgbvjgb7jgpMxNQYEmi8B%0ABTE2CgECBinjgYLjgbvjgYLjgbvjgb7jgpMxNgYEoAABBTE3CgECBinjgYLjgbvjgYLjgbvjgb7j%0AgpMxNwYEpjEBBTE4CgECBinjgYLjgbvjgYLjgbvjgb7jgpMxOAYErUgBBTE5CgECBinjgYLjgbvj%0AgYLjgbvjgb7jgpMxOQYEtUsBAQ%%3D&year=100

改行というか空白が入っている分データは大きいのかな?良く分からない。ちなみにcompressかけなくてもdecordeの際にuncompressしないとなんかな「RangeError: Error #2006: 指定したインデックスが境界外です。」なエラーが出てくる。理由は不明。
ちょっとまだサーバサイドでDBに格納してないのであれですが、多分いけるのではないかと・・。
nutsuさんとありがとうございました!!

「ByteArrayで変数をサーバに送信するの巻」への3件の返信

どうもです。
僕の環境でエラーが発生しなかったのはSDKのビルドの違いだったようです。
昨日テストしたのはBeta3でした。最新の3.0.477を入れてみたら、無事に?同じエラー出てます…。
中途半端な情報で申し訳なかったです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です