【问题标题】:Pause and resume download in flex?在 flex 中暂停和恢复下载?
【发布时间】:2011-01-03 22:01:58
【问题描述】:

是否可以在空中应用程序中开始下载、暂停下载然后再继续下载?

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

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

【问题讨论】:

    标签: apache-flex actionscript-3 air download


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      是的,您会想使用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);
      }
      

      【讨论】:

        猜你喜欢
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        • 1970-01-01
        • 2012-08-27
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多