2011-08-19 3 views
0

Webアプリケーションのコンポーネントとして使用されるJavaプロジェクトがあります。このJavaコードは、xlsファイルを特定のフォルダーに書き込みます。このファイルのダウンロード機能を提供したいと思います。ファイルの書き込みが完了するとすぐに起動する必要があります。 問題は、サーバー環境がなければ、どのようにダウンロード機能を書くことができるのですか?Javaファイルのダウンロードコードの設計上の問題

+1

あなたは何をしているのかを明確にする必要があります。ダウンロードウィンドウが表示されるようにファイルをユーザーのブラウザにプッシュしたいとしますか?それとも、コンポーネントをダウンロードしているのですか? –

+0

ローカルサーバー環境の設定 – zellio

+0

ファイルが書き込まれると、ダウンロードウィンドウが表示されます。 –

答えて

4

特定のフォルダにファイルに書き込まないでください。すぐにHTTPレスポンス本体に書き込んでください。ダウンロードジョブはwebappのコードで行うだけです。私はあなたがサーブレットを使用していると仮定します。 HTTP応答Content-Dispositionヘッダーをattachmentに設定すると、ブラウザには名前を付けて保存ダイアログが表示されます。 Content-Typeヘッダーも設定すると、ブラウザーはその処理を理解します(たとえば、をExcelで開いたり保存したりしますか?など)。

response.setHeader("Content-Type", "application/vnd.ms-excel"); 
response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); 

// Now write xls to response.getOutputStream() instead of FileOutputStream. 

そのJavaプロジェクトのAPIがうまく設計されている場合、あなたは、このような方法で何か持っている必要があります。

public void writeXls(OutputStream output) throws IOException { 
    // Do your job to write xls to output. E.g. if you were using POI HSSF: 
    // WritableWorkbook workBook = Workbook.createWorkbook(output); 
    // ... 
} 

設定後を次のようにあなたはサーブレットでそれを呼び出すことができますこの方法を上記のヘッダ:

yourClass.writeXls(response.getOutputStream()); 

さらには、それが簡単のようなプレーンバニラのJavaアプリケーションでテスト/再利用することができ、以下:

yourClass.writeXls(new FileOutputStream("/path/to/foo.xls")); 
1

これは私のやり方です。私は私のページにダウンロードSQLを表示します。

response.setHeader("Content-Disposition", "attachment; " + 
    "filename=ContactPurge.sql"); 
response.setContentType("application/x-sql-data"); 
response.getWriter().write(procsql); 
response.getWriter().write(sql); 
response.flushBuffer();