Lo que intento lograr es cargar algunos datos binarios, específicamente un ByteArray que representa una imagen PNG, a un servidor que usa la clase URLLoader junto con URLRequest.Excepción inesperada de seguridad de Flash al utilizar URLLoader
Cuando establezco la propiedad contentType
de URLRequest en 'multipart/form-data' en lugar de la predeterminada, la llamada a urlLoader.load()
da como resultado una excepción de seguridad.
Cuando dejo la propiedad contentType
como predeterminada, funciona bien, pero lleva mucho tiempo (proporcional a la longitud del archivo PNG) cargar el archivo en el servidor.
Entonces, mi pregunta es ¿POR QUÉ obtengo esta excepción de seguridad? ¿Y cómo puedo evitarlo?
Tenga en cuenta que mi SWF se sirve desde un servidor de desarrollo, no el sistema de archivos local (el servidor de desarrollo de Google App Engine, para ser precisos).
Aquí está el código:
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);
});
¡Muchas gracias! Estuve perdida durante horas anoche ... Tuve que modificar algunas cosas, así que vea mi respuesta para saber exactamente cómo terminó trabajando – Cameron
De nada. Sí, es bueno saber sobre el límite. Saludos. – evilpenguin
muchas gracias ... raramente hago revem flash, pero necesitaba actualizar un cargador, y esto finalmente me salvó :) – will