2010-01-11 110 views
3

空中應用程序是否可以開始下載,暫停並在此之後恢復?暫停並恢復下載flex?

我想下載很大的文件(1-3Gb),我需要的,如果連接中斷,則該用戶試圖下載它從最後位置啓動該文件的下一次肯定。

任何想法和源代碼示例將不勝感激。

回答

5

是的,你會想要使用URLStream class(URLLoader不支持部分下載)和HTTP Range header。請注意,Range頭部有一些繁重的安全限制,但在AIR應用程序中應該沒問題。這裏有一些未經測試的代碼應該給你一個總體思路。

private var _us:URLStream; 
private var _buf:ByteArray; 
private var _offs:uint; 
private var _paused:Boolean; 
private var _intervalId:uint; 
... 
private function init():void { 
    _buf = new ByteArray(); 
    _offs = 0; 

    var ur:URLRequest = new URLRequest(... uri ...); 
    _us = new URLStream(); 

    _paused = false; 
    _intervalId = setInterval(500, partialLoad); 
} 
... 
private function partialLoad():void { 
    var len:uint = _us.bytesAvailable; 
    _us.readBytes(_buf, _offs, len); 
    _offs += len; 

    if (_paused) { 
     _us.close(); 
     clearInterval(_intervalId); 
    } 
} 
... 
private function pause():void { 
    _paused = true; 
} 
... 
private function resume():void { 
    var ur:URLRequest = new URLRequest(... uri ...); 
    ur.requestHeaders = [new URLRequestHeader("Range", "bytes=" + _offs + "-")]; 
    _us.load(ur); 
    _paused = false; 
    _intervalId = setInterval(500, partialLoad); 
}