2011-12-02 44 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