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 SDKの中に入っているという情報を頂き、喜び勇んでゲット。しかし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%3D&year=100
改行というか空白が入っている分データは大きいのかな?良く分からない。ちなみにcompressかけなくてもdecordeの際にuncompressしないとなんかな「RangeError: Error #2006: 指定したインデックスが境界外です。」なエラーが出てくる。理由は不明。
ちょっとまだサーバサイドでDBに格納してないのであれですが、多分いけるのではないかと・・。
nutsuさん色々とありがとうございました!!
「ByteArrayで変数をサーバに送信するの巻」への3件の返信
うお・・めっちゃ横に伸びとる・・・orz
どうもです。
僕の環境でエラーが発生しなかったのはSDKのビルドの違いだったようです。
昨日テストしたのはBeta3でした。最新の3.0.477を入れてみたら、無事に?同じエラー出てます…。
中途半端な情報で申し訳なかったです。
いえいえ、こちらこそ色々とありがとうございました!