2011-12-02 40 views
2

有没有办法使用URLLoader下载文件,然后将其保存到磁盘而不使用filereference或任何使用对话框?这是我有,但没有工作:保存没有filereference的下载

public function onDownloadComplete(e:Event):void 
{ 
    DownloaderProgress.label = 'Download Done'; 

    var loader:URLLoader = URLLoader(e.target); 
    var rtsFile:File = File.applicationStorageDirectory.resolvePath("RTS.zip"); 
    var rtsStream:FileStream = new FileStream(); 
    rtsStream.open(rtsFile, FileMode.WRITE); 
    rtsStream.writeBytes(loader.data); 
    rtsStream.close(); 
} 

也澄清,我的程序是在土坯空气。因此,它将作为桌面应用程序运行,而不是网页上的Flash对象。

+0

的navigateToUrl(新的URLRequest( 'RTS.zip')); – mgraph

+0

它应该是。我的意思是,你可以在不需要对话框的情况下写入文件,为什么你不能写下载的字节呢? – LordZardeck

+0

@LordZardeck你的意思是上传 – mgraph

回答

6

你必须使用替代的URLLoader使用URLStream:

var downloadStream:URLStream = new URLStream(); 
downloadStream.addEventListener(Event.COMPLETE, onDownloadComplete); 
downloadStream.load(new URLRequest(url)); 

// ... 

private function onDownloadComplete(event:Event):void 
{ 
    var bytes:ByteArray = new ByteArray(); 
    downloadStream.readBytes(bytes); 

    try 
    {   
     // delete old file first 
     if (_saveToFile.exists) 
     { 
      _saveToFile.deleteFile(); 
     } 
     _fs = new FileStream(); 
     _fs.addEventListener(IOErrorEvent.IO_ERROR, onSaveFileIOError); 
     _fs.open(_saveToFile, FileMode.WRITE); 
     _fs.writeBytes(bytes); 
     _fs.close(); 

     _fs.removeEventListener(IOErrorEvent.IO_ERROR, onSaveFileIOError); 
    } 
    catch (error:Error) 
    { 
     trace("could not write file to local machine"); 
    } 
} 

我只是复制粘贴&一些代码从一个类矿井。不是100%完成,但应该指出你在正确的方向...

+0

甜。我会尝试一下 – LordZardeck

+0

真棒!这工作完美!我搜索了超过50页的不同搜索引擎,找不到答案! – LordZardeck