user1350184
user1350184

Reputation:

Flash file download doesn't work on the server

I am creating a Flash engine, and I have an Loader class. When I open the .swf file in a map it works, but when I open it on my server it doesn't. The HTTP Status returns a 200 so it means it has a connection but the Image does not display... How is this caused and how can I fix it?

package com.loading{
import flash.display.Loader;
import flash.media.Sound;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ErrorEvent;
import flash.events.IOErrorEvent;
import flash.events.EventDispatcher;
import com.events.LoaderEvent;
import flash.media.SoundChannel;
import flash.events.HTTPStatusEvent;

public class Loader extends EventDispatcher {

    public var returnImages:Array = new Array();

    public var totalImages:int = 0;

    public function Loader() {
    }

    public function LoadImage(path:String) {
        var imgLoader:flash.display.Loader = new flash.display.Loader();
        imgLoader.contentLoaderInfo.addEventListener(LoaderEvent.COMPLETE, loadImageComplete);
        imgLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpError,false,0,true);
        imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, error, false, 0 ,true);
        imgLoader.load(new URLRequest(path));
        totalImages = 1;
    }

    public function LoadImages(paths:Vector.<String>) {
        totalImages = paths.length;
        for (var i:int = 0; i<paths.length; i++) {
            var imgLoader:flash.display.Loader = new flash.display.Loader();
            imgLoader.contentLoaderInfo.addEventListener(LoaderEvent.COMPLETE, loadImageComplete);
            imgLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpError,false,0,true);
            imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, error, false, 0 ,true);
            imgLoader.load(new URLRequest(paths[i]));
        }
    }

    private function loadImageComplete(e:Event) {
        returnImages.push(e.target.content);
        if (returnImages.length == totalImages) {
            dispatchEvent(new LoaderEvent(LoaderEvent.ALL_IMAGES_LOADED,0,totalImages,true));
        } else {
            dispatchEvent(new LoaderEvent(LoaderEvent.IMAGE_LOADED,returnImages.length,totalImages,true));
        }
    }

    private function error(e:IOErrorEvent) {
        dispatchEvent(new LoaderEvent(LoaderEvent.ERROR,0,0,e.text,true));
    }

    private function httpError(e:HTTPStatusEvent) {
        if (e.status != 200) {
            dispatchEvent(new LoaderEvent(LoaderEvent.ERROR,0,0,e.status,true));
        }
    }



}

}

And this is how it's loaded:

var lo:com.loading.Loader = new com.loading.Loader();
lo.LoadImage("http://s3files.core77.com/blog/images/Balloon-Tank.jpg");
lo.addEventListener(LoaderEvent.ERROR, error, false, 0 ,true);
lo.addEventListener(LoaderEvent.ALL_IMAGES_LOADED,loadImage, false, 0, true);
function loadImage(e:LoaderEvent) {
for (var i:int =0; i<e.totalPosition; i++) {
    info.appendText("Loaded Image: " + i+"\n");
    try {
        var tempBitmap:Bitmap = lo.returnImages[i];
        tempBitmap.scaleX = tempBitmap.scaleY = 2;
        tempBitmap.alpha = 0.5;
        addChild(tempBitmap);
    } catch (error:Error) {
        info.appendText("Catched Error: " + error.toString() + "\n");
    }
}
}

function error(e:LoaderEvent) {
info.appendText("Error: " + e.currentString+"\n");
}

Upvotes: 0

Views: 273

Answers (1)

net.uk.sweet
net.uk.sweet

Reputation: 12431

I think you're encountering a cross domain issue when you create a new Bitmap from the loaded image and attempt to manipulate its scale and alpha properties. The quick fix would be to load your test image from the same server from which the SWF is hosted.

If you're interested in cross domain policies as they relate to Flash, you should read the (rather esoteric) Adobe documentation, in particular the section titled "Traversing the Display List".

Upvotes: 0

Related Questions