電気ウナギ的○○

About Home

Webサーバから特定のファイルを落としてくるAIRアプリ

shinoda (2010年9月 9日 02:27)

今度作成予定の Adobe AIR アプリに、Webサーバ上から特定のファイルを落としてくる機能をつけないといけないので、どんな方法があるか試してみようと思って、取りあえず URLLoader + URLRequest クラス利用で作ってみた。

「受信スタート」ボタンを押したら、Web サーバ上の画像ファイルを取得し、それを hoge.jpg という名前で書き出すだけのプログラム。

最初は HTTPService クラスを使った方がいいのかなと(だって名前がそのものずばりだから)色々やってみたのだが、どうも HTTPService クラスは Web サービス用?
データをどうしても ByteArray で取り出せないので諦めた。
XML や CSV などのテキストデータではうまくいったんだけどなあ。

で、取りあえず URLLoader + URLRequest クラスを利用してデータを取得するパターンのソースが↓こんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="274" height="120">
   
    <mx:Script>
    <![CDATA[

        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLLoaderDataFormat;
        import flash.net.URLRequest;
        import flash.net.URLRequestHeader;
        import flash.net.URLVariables;
        import flash.utils.ByteArray;

        private function getHttp():void {

            var req:URLRequest = new URLRequest();
            req.url    = "http://www.exsample.com/test/hoge.jpg";
            req.userAgent    = "Test Bot 1.0";

            var loader:URLLoader = new URLLoader();

            loader.addEventListener(Event.COMPLETE,loadComp);

            loader.dataFormat = URLLoaderDataFormat.BINARY;
            loader.load(req);

        }

        private function loadComp(event:Event):void{

            var urlLoader:URLLoader = event.target as URLLoader;
            var byte:ByteArray    = urlLoader.data as ByteArray;

            var file:File    = File.userDirectory.resolvePath("hoge.jpg");
            var stream:FileStream    = new FileStream();
            stream.openAsync(file, FileMode.WRITE);
            stream.writeBytes(byte, 0, byte.bytesAvailable);
            stream.close();

        }

    ]]>
    </mx:Script>

    <mx:Button x="93.5" y="20" label="受信スタート" id="button1" click="getHttp();"/>

</mx:WindowedApplication>

最初、取得するデータの型を

    loader.dataFormat = URLLoaderDataFormat.BINARY;

という具合に指定してなかったので(多分、ディフォルト値は'TEXT'?)、ハマってしまった。
いやあ、日頃、データ型の無い Perl を使うことが多いんでねえ。

バイナリだろうがテキストだろうが、生のデータを返してくるプロパティがあればいいのにな。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/1275

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE