5

ここ数か月間、PHP アプリケーションで Uploadify を使用しており、とらえどころのないバグを突き止めようとしています。致命的なエラーが発生したときに電子メールを受け取り、かなりの量の詳細を提供してくれます。私はそれらの何十ものを受け取りました。ただし、自分で問題を再現することはできませんでした。一部のユーザー (私のような) は問題を経験しませんが、他のユーザーは問題を経験します。

問題の詳細を説明する前に、ここで流れを説明します。

  • ユーザーが、使用している CMS のページの編集画面にアクセスします。
  • ページのレコード ID は非表示の値としてフォームに入れられます。
  • ユーザーは [Uploadify] 参照ボタンをクリックし、ファイルを選択します (単一のファイル選択のみが許可されます)。
  • ユーザーがフォームの [送信] ボタンをクリックします。
  • jQuery はフォーム送信アクションをインターセプトし、Uploadify をトリガーしてアップロードを開始し、送信アクションに対して false を返します (フォーム送信イベントを手動でキャンセルして、Uploadify が引き継ぐことができるようにします)。
  • アップロードをカスタム プロセス スクリプトにアップロードします。
  • Uploadify はアップロードを終了し、Javascript 完了コールバックをトリガーします。
  • Javascript コールバックは $('#myForm').submit() を呼び出してフォームを送信します。

今、それが起こるべきです。アップロードが 100% でフリーズするという報告や、「I/O エラー」が表示されるという報告を受け取りました。

何が起こっているかというと、フォームは完了コールバックで送信されていますが、フォームに存在するいくつかの投稿パラメーターは単に投稿データにありません。前に私が言った、非表示フィールドとしてフォームに追加されたページの ID は、投稿データ ($_POST) にはありません。$_POST 配列に「id」の項目はありません。奇妙なことに、投稿データにはいくつかのフィールドの値が含まれています。たとえば、レコード名用の「名前」というタイプのテキストの入力があり、投稿データに表示されます。

ここに私が集めたものがあります:

  • これは、Mac OSX 10.5 および 10.6、Windows XP、および Windows 7 で発生しています。正確なユーザー エージェント文字列があれば投稿できます。
  • ユーザーは Flash 10.0.12 以降を使用する必要があります。10.0.12 未満の場合、フォームは通常の「ファイル」フィールドの使用に戻るようにしました。

これの原因が何であるかについて、誰かが何か考えを持っていますか?

4

3 に答える 3

3
IOError: Client read error (Timeout?)

サーバー側はpython/djangoですが、同じエラーが頻繁に発生します。クライアントがタイムアウトしたと思いましたが、ログを振り返ってみると、認証ルーチンで何かを変更したときに、これが停止したのは偶然の一致のようです。サーバーがファイルを受信して​​いるのに、ストレージへの書き込みを拒否している可能性はありますか?

また、いくつかのフラッシュクライアントがCookieを送信しないことをご存知ですか?Uploadifyの「scriptData」変数にセッションキーを挿入することで、この問題を回避する必要があります。

バツ - - - - - - - - - - - - - - - -

編集。このpython/djangoコードは、uploadifyが自分自身を送信するルーチンから始まります。

# Adobe Flash doesn't always send the cookies, esp. from Apple Mac's.
# So we've told flash to send the session keys via POST. So recreate the
# session now. Also facilitates testing via curl.
cookie_name = settings.SESSION_COOKIE_NAME
if request.member.is_anonymous() and request.POST.has_key(cookie_name):

        # Convert posted session keys into a session and fetch session
        request.COOKIES[cookie_name] = request.POST[cookie_name]
        SessionMiddleware().process_request(request)

# boot anyone who is still anonymous
if request.member.is_anonymous():
    response['message'] = "Your session is invalid. Please login."
    return HttpResponse(simplejson.dumps(response), mimetype='application/json')
于 2010-04-26T10:44:25.073 に答える
0

FirefoxでライブHTTPヘッダーを使用して、投稿データが失われる原因となる何らかの書き換えが発生していないかどうかを確認しましたか?

于 2010-04-26T11:59:05.193 に答える
0

Uploadify はフォームを変更する可能性があります。uploadify が終了し、コールバックを呼び出している時点で、フォームの html/DOM ツリーを見てください。

于 2010-04-26T11:45:31.863 に答える