URLRequest와 함께 URLLoader 클래스를 사용하여 일부 이진 데이터, 특히 PNG 이미지를 나타내는 ByteArray를 서버에 업로드하려고합니다.URLLoader를 사용할 때 예기치 않은 플래시 보안 예외
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
당신을 환영한다. 그래, 경계에 대해 잘 알고있어. 문안 인사. – evilpenguin
sooo so much ... 고맙습니다. 드물게 플래시 개발자는 없지만 업 로더를 업데이트해야합니다. – will