Monday, March 14, 2011

Loading files using URLStream:

There are many ways one can load files in Flash Action Script 3, and this is one of the methods to do so.  But more importantly, this is one of the ways you can use to by pass the annoying "Flash Error #2048: Sandbox Security Error." 





Here is a sample you can use to load file using URLStream.

 package {
  import flash.display.Sprite;
  import flash.errors.*;
  import flash.events.*;
  import flash.net.URLRequest;
  import flash.net.URLStream;

  public class URLStreamExample extends Sprite {
    private static const ZLIB_CODE:String = "CWS";
    private var stream:URLStream;

      public function URLStreamExample() {
        stream = new URLStream();
        var request:URLRequest = new URLRequest("http://www.thongvu.com/arrow.gif");
        addMyListeners(stream);
        try {
          stream.load(request);
        } catch (error:Error) {
          trace("Unable to load requested URL.");
        }
      }
      private function addMyListeners(target:EventDispatcher):void {
        if(target==null)
          return;
        target.addEventListener(Event.COMPLETE, completeHandler);
        target.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
        target.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        target.addEventListener(Event.OPEN, openHandler);
        target.addEventListener(ProgressEvent.PROGRESS, progressHandler);
        target.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
      }
      private function parseHeader():void {
        trace("parseHeader");
        trace("isCompressed: " + isCompressed());
        trace("version: " + stream.readByte());

        var bytes:ByteArray();
        stream.readByte(bytes);

        var loader:Loader = new Loader();
        loader.loadBytes( bytes, new LoaderContext(false, ApplicationDomain.currentDomain));

        var loaderInfo:LoaderInfo = loader.contentLoaderInfo;
        loaderInfo.addEventListener(Event.COMPLETE, assetBytesLoaded);
        loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadErrHandler);
        loaderInfo.addEventListener(IOErrorEvent.NETWORK_ERROR, loadErrHandler);
        loaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loadErrHandler);
      }
      private function isCompressed():Boolean {
        return (stream.readUTFBytes(3) == ZLIB_CODE);
      }
      private function completeHandler(event:Event):void {
        trace("completeHandler: " + event);
        parseHeader();
      }
      private function openHandler(event:Event):void {
        trace("openHandler: " + event);
      }
      private function progressHandler(event:Event):void {
        trace("progressHandler: " + event);
      }
      private function securityErrorHandler(event:SecurityErrorEvent):void {
        trace("securityErrorHandler: " + event);
      }
      private function httpStatusHandler(event:HTTPStatusEvent):void {
        trace("httpStatusHandler: " + event);
      }
      private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event);
      }
     
      /////////////////////////////////////////////////////////////////////
      private function assetBytesLoaded(event:Event):void {
      // bam!!! finally. you got it. congrats. now go have milk and cookies!!!
        var myDisplayObject:DisplayObject = event.target.content as DisplayObject;
      }
      private function loadErrHandler(event:Event):void {
        trace("loadErrHandler: " + event);
      }
   }
}

Hope you enjoyed it.

Related Links:
sandbox-security-error
flash-error-2048

1 comment:

  1. i get an error on that line: var bytes:ByteArray();

    ReplyDelete