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