在flex中暂停和恢复下载?

时间:2010-01-11 20:21:31

标签: flex actionscript-3 air download

是否可以在空中应用程序中开始下载,暂停和恢复之后?

我想下载非常大的文件(1-3Gb),我需要确定连接是否中断,然后下次用户尝试下载文件时,它从最后一个位置开始。

任何想法和源代码示例都将不胜感激。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

如果你的目标是移动设备,也许你应该看看这个原生扩展:http://myappsnippet.com/download-manager-air-native-extension/它支持使用多节块同时恢复下载,以便尽快下载文件。