我試圖完成的是將一些二進制數據,特別是表示PNG圖像的ByteArray上傳到服務器,使用URLLoader類和URLRequest。使用URLLoader時發生意外的Flash安全異常
當我將URLRequest的contentType
屬性設置爲'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);
});
非常感謝!昨晚我被困了好幾個小時...... 我不得不調整一些東西,所以看看我的答案是如何結束了工作 – Cameron 2009-08-13 18:28:31
不客氣。是的,很高興知道邊界。問候。 – evilpenguin 2009-08-14 06:25:44
非常感謝你sooo ...我很少做閃存開發,但我需要更新上傳,這最終救了我:) – will 2011-10-28 05:45:59