2

アップロードの進行状況を表示しながら、複数のクライアント側で生成された画像 (ファイルではないため、FileReference を使用できません) をアプリケーションにアップロードさせようとしています。これは、本来よりもはるかに難しいことが証明されています。Cairngorm Task ライブラリを使用して、クライアントで生成されたイメージに対して次の手順を実行しています。

  1. ステージの領域のコンテンツを描画する BitmapData オブジェクトを生成します
  2. プログレスバーを表示するために、画像を JPEG として非同期的にエンコードします ( http://dgrigg.com/blog/2009/03/05/as3-jpegencoder-and-big-images/を参照) 。
  3. 進行状況を表示するために、イメージを非同期的にアップロードします (チャンク、http: //soenkerohde.com/2010/01/chunk-file-upload/ を参照)。

ユーザーがボタンをクリックすると、SequenceTask が開始され、エンコーディングは魅力的に機能しますが、アップロード タスクが発生すると、次のエラーで炎上します。

SecurityError: エラー #2176: ポップアップ ウィンドウを表示するアクションなど、特定のアクションは、マウスのクリックやボタンの押下など、ユーザーの操作によってのみ呼び出される場合があります。

ユーザーの介入なしに URLLoader.load アクションを開始できないため、これが発生していると思います。ユーザーボタンをクリックしていても、物事が非同期的に発生し始めるため、このクリック イベントはオリジネーターとは見なされなくなっていると思います。

これがマウス クリックの結果であることを URLLoader に知らせる方法はありますか? これは、チャンクアップロードが機能するために不可欠です。後続のチャンクはすべて新しい URLLoader も開始するため、リファレンスのチャンクアップローダーが実際に機能するかどうかは 100% 確信が持てません。最初は単純なコードだけを実行してみるかもしれません。

アイデアをありがとう。

4

3 に答える 3

1

アップロード前にユーザーの操作を強制するには、アプリケーション フローを変更する必要があります。

この動作は Flash Player 10 で導入されました (これは Flash Player 9 の URLLoaders では発生しなかったとほぼ確信しています) 。これを回避する方法はありません。そうしないと、重大なセキュリティ ホールになります。「偽の」マウス イベントのディスパッチは機能しません。アップロード/POST は、ユーザー インタラクション (マウス クリックまたはキーボード ショートカット) がキャプチャされる同じコールスタックで実行する必要があります。

詳細については、 「Flash Player 10 におけるユーザー操作の要件」を確認してください。

于 2011-03-24T00:19:01.610 に答える
0

MouseEventオブジェクトをディスパッチして、ユーザー アクションを模倣できますか?

私はFileReference.save()それを呼び出すだけで自分の側でやってみました(ユーザーの操作なしで動作することを意図したものではありません)が、動作するので、私の設定に何か違うものがあるかもしれません

于 2011-03-23T22:49:33.350 に答える
0

私は今、あなたのものと同じ問題を抱えています。いくつかの画像があり、最初のアップロードだけが魅力のように機能しますが、2 番目のアップロードでは次のエラーが発生しなくなりました:「SecurityError: エラー #2176」、および投稿を見て、2 番目のアップロードの内部呼び出しが原因であることに気付きましたユーザーインタラクションの代わりに。

多くのオプションを試してみましたが、そのうちの 1 つは、次のアップロードと同じエラーを開始する前に、close() で URLloader を閉じていました。秘訣は、ユーザーの操作をエミュレートすることです。

于 2012-04-06T02:47:43.733 に答える