2011-12-08 12 views
2

私はワークフローの1つで、動的に生成されたファイルをユーザーがダウンロードできるWebアプリケーションを持っています。入力は、ファイルを生成するために必要なパラメータを持つ形式です。ブラウザから動的に生成されたファイルをダウンロードするにはどうすればいいですか?

私の現在の解決策は、サーブレット側でこのフォーム&を提出させることです。私は応答ヘッダを変更して添付ファイルにするようにします。&も適切なMIMEタイプを提供します。

しかし、私はこのアプローチが不十分であることがわかります。ファイルの生成には非常に時間がかかる可能性があるため、このような場合には一定のタイムアウト後にブラウザで直接500または503のエラーが発生します。私はこれが現在のアプローチで期待されると思う。

フォームを送信するとすぐにユーザーにわかりやすいようにワークフローを柔軟にして、ファイルが準備完了次第、すぐにファイルへのリンクを表示するように、&を生成するのに時間がかかることがあります。私はファイルまたはこのメッセージをメールで送信することもできますが、これは理想的ではありません。

皆さんからこの問題のアプローチを提案できますか?より具体的に情報を提供する必要がありますか?どんな助けもありがたい。

答えて

1

あなたは(つまり、文書は準備ができているのではなく、彼らがオフに行くと、待っている間に他のことを行う持っているため、ユーザは待たせる)同期これをしたい場合は、伝統的なアプローチをそれらを「レポートの読み込み」ページに表示することです。このページであろうと

  • 1)レポートがロードされていることを彼らに知らせます。リフレッシュ時に
  • 2)メタリフレッシュタグやJavaScriptを使用してのいずれか(自分自身をリフレッシュします)
  • 3)は、報告書が準備し、どちらかであるかどうかをチェックします:
    • a)は、それがにISN場合はステップ1に戻ります。準備ができました
    • b)準備ができていれば、文書を提出します。

同期は、古い学校のようなものですが、それはあなたが望んでいたアプローチだったようにあなたの質問が聞こえました。

非同期アプローチが含まれます:それは準備ができていたら

  • 使用アヤックスは、ドキュメントへのリンクがページに表示されるようにします。
  • 以前に生成されたドキュメントを表示する別のページがあります。使用はこのページに余暇に行くことができ、その間、彼らはサイトの残りの部分を閲覧することができます。これには、生成された文書の履歴を保持する必要があります。
  • 提案したとおり、電子メールで送信してください。
1

直接フォームを送信する代わりに、フォームデータを使用してサーバーに非同期Ajax呼び出しを行うことができます。 サーバー上で一時ファイルを作成し、ダウンロードURLを使用してクライアントへのリンクを返します。 Javascriptで回答を送信した後、ユーザーにヒントが表示され、ダウンロードリンクが1分以内に表示されます。一時ファイルをクリーンアップすることを忘れないでください!

Ajaxコールを送信するには、Javascript Frameworkを使用することをお勧めします。 jQueryのを見て:

http://api.jquery.com/category/ajax/

+0

ありがとう、Andreas。私はコードベースで広範囲にjQueryを使用しています。これらのファイルやその他のメカニズムをクリーンアップするためのcronジョブをお勧めしますか? – Chantz