2017-09-08 6 views
1

ボタンをクリックすると、サービスを呼び出してデータベースを照会し、csvファイルを生成してユーザーに返信します。このプロセスは長時間実行されています(最大40秒かかることがあります)。ユーザーをブロックしないようにします。私は、ユーザーがレポート生成の進行状況をタックすることができます進行状況]ページを作成するためにリクます:spring mvcでのファイルプロセスの更新の生成

私の考えは次のとおりです。

は、ユーザからの入力を取り、サービスにますCreateReport要求を提出します。 応答を待たずに、レポートIDをユーザーに返します。 新しいタブが開き、ユーザーはレポート生成のステータスを監視できます ユーザーはレポートページを確認してリクエストのステータスを確認できます リクエストが準備完了すると、レポートのダウンロードがブラウザで開始されます。

私はこのようななめらか持っているしたいと思います:

。ファイルを保存し、ファイルIDを返すコントローラメソッド。 その後、このコントローラで、新しいスレッドはServiceを呼び出し、指定されたファイルにデータを書き込みます b。リクエストパラメータを使用して、レポートのステータスを表示コントローラメソッド - 生成されたファイルか 場合、ファイルが生成されている場合は チェックをFILEID - HttpServletResponseの応答にファイルを書き込む

質問です:私は、ファイルIDを格納し、どのようにファイルIDを接続する必要があります ファイル自体? (キャッシュデータベース)

レポートステータスを確認するにはどうすればよいですか?私は1秒ごとにAJAXリクエストを送信すると思いますか?

アイデアや推奨事項はありますか?

答えて

1

私によると、CSVファイルのダウンロードで応答するサーブレットを作成することができます。 Onボタン

URLを開いて新しいタブをクリックします(reportIdまたはそのURLを追加)

window.open('/downloadCSV/15646', '_blank'); 

そして

@RequestMapping(path = "/downloadCSV/{reportId}", method = 
    RequestMethod.GET) 
     public void getCSV(@PathVariable String reportId, HttpServletRequest 
     request, HttpServletResponse response) throws Exception { 

      byte[] fileContent; 

      //write your logic or call service to generate csv report and get 
      bytes of file 

       response.setContentType("provide content type"); 
       ServletOutputStream out = response.getOutputStream(); 
       out.write(fileContent); 
       out.flush(); 
      return; 
     } 

にこのダウンロード動作のために、この意志をサーブレットを作成:以下のプロセスを考えてみましょう開いたタブでファイルをダウンロードしてください

関連する問題