Nieoczekiwany wyjątek bezpieczeństwa Flash podczas używania URLLoader

To, co próbuję osiągnąć, to przesłanie danych binarnych, w szczególności ByteArray reprezentujących obraz PNG, na serwer za pomocą klasy URLLoader w połączeniu z URLRequest.

Kiedy ustawięcontentType właściwość URLRequest do „danych wieloczęściowych / formularzy” zamiast domyślnych, wywołanie dourlLoader.load() powoduje wyjątek bezpieczeństwa.

Kiedy wychodzęcontentType właściwość jako domyślna, działa dobrze, ale zajmuje dużo czasu (proporcjonalnie do długości pliku PNG), aby przesłać plik na serwer.

Moje pytanie brzmi: DLACZEGO otrzymuję ten wyjątek bezpieczeństwa? I jak mogę tego uniknąć?

Zwróć uwagę, że mój plik SWF jest obsługiwany z serwera programistycznego, a nie z lokalnego systemu plików (a dokładniej z serwera programistycznego Google App Engine).

Oto kod:

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

questionAnswers(3)

yourAnswerToTheQuestion