電気ウナギ的○○

About Home

AIRアプリで、インターネット上からファイルを取ってくる

shinoda (2010年12月 8日 09:58)

20101208_download_test.jpg

「FileReference.download メソッドだとダイアログが開いちゃうな」に書いたように、インターネット上から自動でデータ取ってきて、ファイルの保存まで自動で行おうとすると、URLLoader でデータ取ってきて、FileStream で書き出すしかないみたい。

こんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    initialize="initProc()"
    layout="absolute" width="348" height="202">
    <mx:Label x="79" y="24" text="ダウンロードテスト" width="191" fontSize="18" textAlign="center" id="Title"/>
    <mx:TextArea x="39" y="60" width="266" height="113" id="Message" text=""/>

    <mx:Script>
    <![CDATA[

    import flash.events.*; 
    import flash.net.URLRequest;
    import flash.net.URLLoader;

    public static const FILE_GET_URI:String    = "http://www.exsample.jp/data/ds.zip";

    public var FileGet:URLLoader;
    public var ZipFileName:String    = "data/cont/ds.zip";

    private function initProc():void {

        FileGet = new URLLoader();
        FileGet.dataFormat    = URLLoaderDataFormat.BINARY; // バイナリ宣言

        FileGet.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
        FileGet.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
        FileGet.addEventListener(Event.COMPLETE, onComplete);

        Message.text    += FILE_GET_URI + " Download Start.\n";

        var request:URLRequest    = new URLRequest();
        request.url    = FILE_GET_URI;
        FileGet.load(request);

    }

    private function onIOError(evt:IOErrorEvent):void {
        Message.text    += "There was an IO Error.\n";
    }

    private function onSecurityError(evt:Event):void {
        Message.text    += "There was a security error.\n";
    }

    private function onComplete(evt:Event):void {
        Message.text    += "File was successfully downloaded.\n";
        Message.text    += "SIZE=" + FileGet.bytesTotal + "\n";

        var file:File = File.applicationStorageDirectory.resolvePath(ZipFileName);
        var stream:FileStream    = new FileStream();
        try {
            stream.open(file,FileMode.WRITE);
            stream.writeBytes(FileGet.data);
            Message.text    += "File Output Success. " + file.nativePath + "\n";
        }
        catch(error:IOError) {
            Message.text    += "File Output Error.\n";
        }
        finally {
            stream.close();
        }
    }

    ]]>
    </mx:Script>

</mx:WindowedApplication>


ちなみに、
FileGet.dataFormat = URLLoaderDataFormat.BINARY;
でバイナリデータ通信だと設定するのを忘れていて、writeBytes する時に

TypeError: Error #1034: Type Coercion failed: cannot convert "PKCDT to flash.utils.ByteArray.

というエラーが出ちゃってハマった。(^^;

FileGet.data を  ByteArray にわざわざ型キャストしてみたり色々やってみたが駄目で、結局、通信モードをバイナリ型にするのを忘れていただけだった。とほほ。

ActionScript も日頃頻繁に使ってるわけではないので、こういうのがまだ身に染み付いてないんだよなあ。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

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

電気ウナギ的○○

About This Site

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


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

Create with jQuery, jQTouch.


CLOSE