2011-01-24 11 views
0

私は、ユーザーのRails/Paperclipファイルのダウンロードがいつの完了であるかを知る必要があるアプリケーションを持っています。私のアプリはAmazon S3と対話するように設定されているので、完成したファイルを受け取ったらjavascript関数を実行する必要があります。Paperclipのダウンロードが完了したら、わかりますか?

どうすればいいですか?

+0

send_fileを使用すると、このメソッドを再定義してfinish(セッション中の値)の後でアプリケーションの状態を変更することができます。クライアントページは定期的にajaxリクエストでアプリケーションを呼び出し、js関数を起動しますされている...私はあなたがコントローラのアクションを投稿すれば、私は問題をよりよく理解することができます。 – andrea

答えて

3

天気を追跡していないか、ダウンロードが完了していないのは、特にJavaScriptの場合です。あなたの質問にはいくつかのぼやけた線があり、私はそれが不可能だと思うようにしています。

まず、send_fileは、送信する内容をWebサーバーに伝えるために特別なヘッダーを渡します。 the send_file docsを参照してください。 Railsは実際にファイルを送信しません。このヘッダーはWebサーバーにファイルを送信するように指示しますが、すぐに戻り、別の要求を処理するために移動します。ダウンロードが完了したかどうかを追跡できるようにするには、あなたのRailsアプリケーションプロセスを占有して、ファイルを送信し、ユーザがダウンロードするまでブロックする必要があります。これは非常に非効率的です。

次に、ファイルをダウンロードしているときにJavaScript関数を実行するにはどうすればいいですか?ユーザーはファイルのダウンロードリンクをクリックし、ファイルがどこにあるか、天気はRailsのsend_file、S3へのリダイレクトはどこから来たのか分かりません。ダウンロードがダウンロードマネージャーに入り、ユーザーがページにとどまるところでChromeやFirefoxが動作する方法を考えているなら、古いページのサーバーとのやり取りはこれ以上ありません!そのページにダウンロードの完了が通知されるようにするには、ダウンロードが完了したかどうかを定期的にチェックするか、サーバーに長いポーリングが必要です。

私はS3ファイルにリダイレクトして、セッション変数を設定して、ダウンロードが完了した後にどこに行きたいかをユーザーにリダイレクトするようにして、次のページにアクセスしたときにあなたの計画された流れに戻ります。

希望すると便利です。

+0

ありがとう@Homairs!誰かが効率的にそれをやる方法を知っているかどうかを確認するために質問を開いたままにしておきます。 +1 – sscirrus

関連する問題