Exceção inesperada de segurança do Flash ao usar o URLLoader
O que eu estou tentando fazer é carregar alguns dados binários, especificamente um ByteArray representando uma imagem PNG, para um servidor usando a classe URLLoader em conjunto com URLRequest.
Quando eu definir ocontentType
propriedade do URLRequest para 'multipart / form-data' em vez do padrão, a chamada paraurlLoader.load()
resulta em uma exceção de segurança.
Quando eu sair docontentType
propriedade como o padrão, ele funciona bem, mas leva muito tempo (proporcional ao comprimento do arquivo PNG) para fazer o upload do arquivo para o servidor.
Então, minha pergunta é: POR QUE estou recebendo essa exceção de segurança? E como posso evitar isso?
Observe que meu SWF está sendo exibido a partir de um servidor de desenvolvimento, não do sistema de arquivos local (para ser preciso, o servidor de desenvolvimento do Google App Engine).
Aqui está o 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);
});