私が達成しようとしているのは、URLLoaderクラスをURLRequestと共に使用して、バイナリデータ、特にPNGイメージを表すByteArrayをサーバーにアップロードすることです。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
あなたは大歓迎です。ええ、境界について知っておいてよかったです。よろしく。 – evilpenguin
soooたくさんありがとう...私はめったにフラッシュデベロッパーはしませんが、アップローダをアップデートする必要がありました。 – will