Flexでセキュリティーサンドボックスの制限を超えて他サーバーの画像バイト列を得る方法

結論:URLLoaderではなくImageかLoaderを使う

Flexでどこかのサーバーにある画像のバイト列を得る方法はいくつかあるが、問題はFlexコンテンツを読み込んだサーバー(自サーバー)以外のサーバー(他サーバー)にある画像のバイト列を得る方法だ。

この場合、セキュリティーサンドボックスの制限により、自サーバーからバイト列を得る場合より方法は限られてくる。

ひとつはcrossdomain.xmlをサーバー上に配置する方法だが、なんらかの理由によりcrossdomain.xmlを配置したくない場合はどうするか。

始めはURLLoaderを使ってバイト列を得ていたが、これは自サーバーかcrossdomain.xmlを配置した場合のみ有効で、これではダメだとわかった。

その後、Imageコンポーネントがセキュリティーサンドボックス制限を超えている事がわかり、それならLoaderなら同様に超えられるかも知れないと試したところ、その通りだった。

var bytes:ByteArray;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteLoader);
function onCompleteLoader():void {
bytes = loader.contentLoaderInfo.bytes;
}
loader.load(new URLRequest(url));

今回のケースの場合、Imageを使用したくなかったのでわざわざLoaderを使ったが、Image.loaderInfo.bytesを取っても可能だろう。

URLLoaderは汎用だが、LoaderやImageは画像の読み込みに用途を限っているためセキュリティーサンドボックスの制限が緩いのではないかと思われる。

目的が達成できたので、これ以上追求する気なし(^^);

コメント

このブログの人気の投稿

レオナルド・ダ・ビンチはなぜノートを「鏡文字」で書いたのか?

macでsmb(samba)共有サーバーに別名で接続(別アカウント名で接続)する方法

Google DriveにCURLでアップロードするには?