Skip to main content
Participant
October 24, 2012
Question

UrlStream intermittent pausing, slowing, waiting?

  • October 24, 2012
  • 1 reply
  • 996 views

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());

        }

    }

}

This topic has been closed for replies.

1 reply

chrispemAuthor
Participant
October 30, 2012

Anyone else seeing this problem or can help?