Quello che sto cercando di fare è caricare alcuni dati binari, in particolare un ByteArray che rappresenta un'immagine PNG, su un server che utilizza la classe URLLoader in combinazione con URLRequest.Eccezione di Flash Security inattesa quando si utilizza URLLoader
Quando si imposta la proprietà contentType
di URLRequest su "multipart/form-data" anziché sul valore predefinito, la chiamata a urlLoader.load()
genera un'eccezione di sicurezza.
Quando lascio la proprietà contentType
come predefinita, funziona correttamente, ma richiede molto tempo (proporzionale alla lunghezza del file PNG) per caricare il file sul server.
Quindi, la mia domanda è PERCHÉ ottengo questa eccezione di sicurezza? E come posso evitarlo?
Si noti che il mio SWF viene fornito da un server di sviluppo, non dal file system locale (il server di sviluppo di Google App Engine per la precisione).
Ecco il codice:
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);
});
Grazie mille! La scorsa notte sono stato perplesso per ore ... Ho dovuto modificare alcune cose, quindi vedi la mia risposta esattamente come ha funzionato – Cameron
Prego. Sì, buono a sapere del confine. Saluti. – evilpenguin
grazie mille ... molto raramente flash dev, ma avevo bisogno di aggiornare un uploader, e questo mi ha finalmente salvato :) – will