Unerwartete Flash-Sicherheitsausnahme bei Verwendung von URLLoader

Ich versuche, einige Binärdaten, insbesondere ein ByteArray, das ein PNG-Bild darstellt, mithilfe der URLLoader-Klasse in Verbindung mit URLRequest auf einen Server hochzuladen.

Wenn ich das einstellecontentType Eigenschaft der URLRequest zu 'multipart / form-data' anstelle des Standardaufrufs zuurlLoader.load() führt zu einer Sicherheitsausnahme.

Wenn ich das Haus verlassecontentType Standardmäßig funktioniert diese Eigenschaft, es dauert jedoch lange (proportional zur Länge der PNG-Datei), bis die Datei auf den Server hochgeladen wird.

Meine Frage ist also, warum ich diese Sicherheitsausnahme erhalte. Und wie kann ich das vermeiden?

Beachten Sie, dass meine SWF-Datei von einem Entwicklungsserver bereitgestellt wird, nicht vom lokalen Dateisystem (genauer gesagt vom Google App Engine-Entwicklungsserver).

Hier ist der Code:

var pngFile:ByteArray = PNGEncoder.encode(bitmapData);

var urlRequest:URLRequest = new URLRequest('/API/uploadImage');

// With this line of code, the call to urlLoader.load() throws the following security exception:
// 'SecurityError: Error #2176: Certain actions, such as those that display a pop-up window, may only be invoked upon user interaction, for example by a mouse click or button press.'
urlRequest.contentType = 'multipart/form-data';

urlRequest.method = URLRequestMethod.POST;
urlRequest.data = pngFile;
urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control', 'no-cache'));

urlLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, onUploadComplete);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onUploadError);

NextFrame.addCallback(function () {
    urlLoader.load(urlRequest);
});

Antworten auf die Frage(3)

Ihre Antwort auf die Frage