Приостановить и возобновить загрузку в flex? - PullRequest
3 голосов
/ 11 января 2010

Возможно ли в эфирном приложении начать загрузку, приостановить ее и после этого возобновить?

Я хочу загрузить очень большие файлы (1-3 Гб), и мне нужно быть уверенным, что если соединение прервано, то в следующий раз, когда пользователь попытается загрузить файл, он запускается с последней позиции.

Будем благодарны за любые идеи и примеры исходного кода.

Ответы [ 2 ]

5 голосов
/ 12 января 2010

Да, вы хотите использовать класс URLStream (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);
}
0 голосов
/ 07 мая 2014

если вы нацеливаетесь на мобильные устройства, возможно, вам стоит взглянуть на это собственное расширение: http://myappsnippet.com/download-manager-air-native-extension/ оно поддерживает одновременную возобновляемую загрузку с несколькими разделами, чтобы загружать файлы максимально быстро.

...