Próbuję przesłać niektóre dane binarne, w szczególności obiekt ByteArray reprezentujący obraz PNG, do serwera za pomocą klasy URLLoader w połączeniu z parametrem URLRequest.Nieoczekiwany wyjątek bezpieczeństwa Flash podczas korzystania z narzędzia URLLoader
Po ustawieniu wartości contentType
obiektu URLRequest na "wieloczęściowe/dane formularzy" zamiast wartości domyślnej, wywołanie funkcji urlLoader.load()
powoduje wyjątek zabezpieczeń.
Kiedy domyślnie zostawiam właściwość contentType
, działa ona prawidłowo, ale zajmuje dużo czasu (proporcjonalnie do długości pliku PNG), aby przesłać plik na serwer.
Moje pytanie brzmi: DLACZEGO otrzymuję wyjątek bezpieczeństwa? I jak mogę tego uniknąć?
Należy zauważyć, że mój plik SWF jest serwowany z serwera programistycznego, a nie z lokalnego systemu plików (dokładniej mówiąc, serwer programistyczny 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);
});
Dziękuję bardzo! Ostatniej nocy byłam zaskoczona godzinami ... Musiałem poprawić trochę rzeczy, więc zobacz moją odpowiedź na dokładnie, jak to się skończyło. – Cameron
Nie ma za co. Tak, dobrze wiedzieć o granicy. Pozdrowienia. – evilpenguin
dziękuję bardzo za bardzo ... Rzadko robię flashowanie dev, ale potrzebowałem aktualizacji uploadera, co w końcu mnie uratowało :) – will