スキップしてメイン コンテンツに移動

ActionScript 3.0: Download Resource and Save as File Asynchronously

Here is a utility class for downloading resource and saving as file asynchronously.
package utils.file 
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.ProgressEvent;
    import flash.filesystem.File;
    import flash.filesystem.FileStream;
    import flash.filesystem.FileMode;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    
    public class AsyncFileSaveDownloader extends EventDispatcher
    {
        public function AsyncFileSaveDownloader() 
        {
            
        }
        
        public function download(url:String, path:String):void {
            var loader:URLLoader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.BINARY;
            loader.addEventListener(Event.COMPLETE, completeDownload);
            loader.load(new URLRequest(url));
            
            function completeDownload(cevt:Event):void
            {
                loader.removeEventListener(Event.COMPLETE, completeDownload);
                
                var file:File = new File(path);
                var fs:FileStream = new FileStream();
                fs.addEventListener(Event.CLOSE, completeSave);
                fs.openAsync(file, FileMode.WRITE);
                fs.writeBytes(cevt.target.data);
                fs.close();
                
                function completeSave(sevet:Event):void {
                    fs.removeEventListener(Event.CLOSE, completeSave);
                    dispatchEvent(new FileDownloadEvent(url, path, FileDownloadEvent.SAVE_CONPLETE));
                }
            }
            
        }
    }
    
}
package utils.file 
{
    import flash.events.Event;
    
    public class FileDownloadEvent extends Event 
    {
        public static const SAVE_CONPLETE:String = "SaveComplete";
        
        private var _url:String;
        private var _path:String;
        
        public function FileDownloadEvent(url:String, path:String, type:String, bubbles:Boolean=false, cancelable:Boolean=false) 
        { 
            super(type, bubbles, cancelable);
            this._url = url;
            this._path = path;
        } 
        
        public override function clone():Event 
        { 
            return new FileDownloadEvent(_url, _path, type, bubbles, cancelable);
        } 
        
        public override function toString():String 
        { 
            return formatToString("FileDownloadEvent", "type", "bubbles", "cancelable", "eventPhase"); 
        }
        
        public function get url():String {
            return _url;
        }
        
        public function get path():String {
            return _path;
        }
    }
    
}

Here is the usage for this utility class.
package utils.file 
{
    import flash.display.Sprite;
 import flash.text.TextField;
    
    public class Test extends Sprite
    {
  private var text:TextField = new TextField();
        
        public function Test() 
        {
   text.text = "start downloading";
   addChild(text);

            var downloader:AsyncFileSaveDownloader = new AsyncFileSaveDownloader();
   downloader.addEventListener(FileDownloadEvent.SAVE_CONPLETE, function(e:FileDownloadEvent):void {
    text.text = "download complete!!";
   });
   downloader.download("http://www.google.com/", "c:/temp/test.html");
        }
        
    }

}

コメント