Неожиданное исключение безопасности Flash при использовании URLLoader
Я пытаюсь выполнить загрузку двоичных данных, в частности ByteArray, представляющего изображение PNG, на сервер, используя класс URLLoader в сочетании с URLRequest.
Когда я установилcontentType
свойство URLRequest для «multipart / form-data»; вместо значения по умолчанию, вызовurlLoader.load()
приводит к исключению безопасности.
Когда я покидаюcontentType
По умолчанию это свойство работает нормально, но загрузка файла на сервер занимает много времени (пропорционально длине PNG-файла).
Итак, мой вопрос: ПОЧЕМУ я получаю это исключение безопасности? И как мне этого избежать?
Обратите внимание, что мой SWF обслуживается с сервера разработки, а не с локальной файловой системы (точнее, сервера разработки Google App Engine).
Вот код:
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);
});