c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

multipart/form-data


AIRDnDしてTwitterのICONを変更するアプリ、が動作するにはする所まで行きました。


でもねー…、AIRのクラスライブラリが変なの。
普通のHTTPRequestで、multipart/form-dataでのファイル送信をサポートしていない訳ですよ…。

Flashから生まれたFlexですから、多分Flashの時のセキュリティ上の問題だとおもうんですが、FileReferenceクラスを使わないとファイルのアップロード(multipart/form-data)ができない。FileReferenceはファイルの選択にパス文字列をつめこめず、ダイアログを開くしかない設計なんですよね。
Javascriptで参照ダイアログのプロパティがReadonlyなのと同じ意味だろう)

DnDでファイルを読み込める(ファイルハンドラがとれるので、Pathがちゃんと拾える)し、それをバイナリで開けるのに、それをUploadできないなんて酷い話ですよ。

もしかすると、書いてないだけでサポートするメソッドがあるのかもしれないんだけれど…見つけられない…。


しかたないので、ファイルをByteArrayで読み込んだ後で、Base64変換して、サーバー側のPerlCGIでそれを複合化した上でTwitterのサーバーに送信するなんて事をやりました
(まあ、Twitterの認証周りは、マトモにセッションをあつかわなければならないので、AIRの貧弱なHTTP UAでやるよりはよっぽど楽で良いのだけれど)

やりましたなんて言うと簡単なんだけれど、Base64のライブラリすらFlexのリファレンスにはクラスがなくて。
でも調べてみたら隠し?でmx.util.Base64Decoderなんてクラスがあったりして…AIRには謎が一杯です。