1 Reply Latest reply: Oct 30, 2012 4:52 AM by chrispem RSS

    UrlStream intermittent pausing, slowing, waiting?

    chrispem Community Member

      Hi,

       

      I have been trying to use the UrlStream to download many files and even single large files. While downloading a single large file it seems to pause mid stream and then burst back in to life and then pause again and so on. The same occurs if I use to download many smaller files. Some will randomly pause.

       

      Is this a bug? Anyone else having this problem? Is there a fix?

       

      package com.layoutmanager.stage

      {

          import flash.events.DataEvent;

          import flash.events.Event;

          import flash.events.EventDispatcher;

          import flash.events.OutputProgressEvent;

          import flash.events.ProgressEvent;

          import flash.filesystem.File;

          import flash.filesystem.FileMode;

          import flash.filesystem.FileStream;

          import flash.net.URLRequest;

          import flash.net.URLStream;

          import flash.utils.ByteArray;

       

         

          public class Downloader extends EventDispatcher

          {

              private var file:File;

              private var fileStream:FileStream;

              private var request:URLRequest;

              private var urlStream:URLStream;

             

              public function Downloader()

              {

                  urlStream = new URLStream();

                 

                  urlStream.addEventListener(Event.OPEN, onOpenEvent);

                  urlStream.addEventListener(ProgressEvent.PROGRESS, onProgressEvent);

                  urlStream.addEventListener(Event.COMPLETE, onCompleteEvent);

                 

                  fileStream = new FileStream();

                  fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, writeProgressHandler);

              }

             

              public function download(fromRequest:URLRequest, toFile:File):void {

                  trace("Start Download");

                  this.request = fromRequest;

                  this.file = toFile;

                  try

                  {

                      fileStream.open(file, FileMode.WRITE);

                      urlStream.load(request);

                  }

                  catch(error:Error) {

                      //Ignore Error

                      trace(error);

                  }

              }

             

              private function onOpenEvent(event:Event):void {

                  dispatchEvent(event.clone());

              }

             

              private function onProgressEvent(event:ProgressEvent):void {

                  writeToDisk();

                  dispatchEvent(event.clone());

              }

             

              private function writeToDisk(force:Boolean = false):void {

                 

                  if(!force || urlStream.bytesAvailable > 51200)

                  {

                      trace("Progress");

                      var fileData:ByteArray = new ByteArray();

                      urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);

                      fileStream.writeBytes(fileData,0,fileData.length);

                      fileData = null;

                  }

                 

                  dispatchEvent(new DataEvent(DataEvent.DATA));

              }

             

              private function writeProgressHandler(evt:OutputProgressEvent):void{

                 

              }

             

              private function onCompleteEvent(event:Event):void {

                  if(urlStream.bytesAvailable > 0)

                      writeToDisk(true);

                  fileStream.close();

                  trace("Download Finished");

                  fileStream.removeEventListener(OutputProgressEvent.OUTPUT_PROGRESS, writeProgressHandler);

                 

                  dispatchEvent(event.clone());

              }

          }

      }