SeasarプロジェクトでExcelファイルを出力する方法[ダウンロード編]
前回は「Fisshplate」を使用して、Excelファイルの出力を行った。
ただ、出力先にローカルフォルダを指定していたため、Webシステムを実際に運用した場合、サーバのローカルフォルダに出力されてしまい、ユーザは見ることが出来ない。
サーバの出力先にリンクを張った画面を用意する方法もあるが、この方法はセキュリティ的に問題があるのでお勧めできない。また、この方法はサーバ上に作成された古いファイルを、何かしらのタイミングで削除してやる手間も増える。
なので、作成したExcelファイルは、サーバ上には出力せず、直接ダウンロードして貰うことが好ましい。
今回は、その方法を紹介する。
方法としては簡単で、「OutputStream」にExcelファイルを書き込めば、ダウンロードが開始される。
ポイントとしては、「OutputStream」は「HttpServletResponse」より取得するので、自動バインディングされる様にすることである。
前回からの修正箇所は下記の通り
package jp.co.smp.excel.action; import java.io.IOException; import java.io.OutputStream; import java.util.Date; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import jp.co.smp.excel.dto.SampleDto; import jp.co.smp.excel.fpao.SampleFpao; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.seasar.struts.annotation.Execute; public class IndexAction { @Resource protected SampleFpao sampleFpao; @Resource protected HttpServletResponse httpServletResponse; //←今回追加 @Execute(validator = false) public String index() { return "index.jsp"; } @Execute(validator = false) public String createExcel(){ //データ作成 SampleDto dto = new SampleDto(); dto.setContact("担当者の名前"); dto.setCustomerNo("c0001"); dto.setCustomerName("顧客の名前"); dto.setTradeNo("2013008028"); dto.setDate(new Date()); dto.setTotal(5680); //Excelテンプレートにデータを埋め込む HSSFWorkbook wb = sampleFpao.sampleTemplate(dto); // ↓↓↓↓↓ 今回の変更箇所 ↓↓↓↓↓ // //ファイルに保存する // try { // // FileOutputStream out = new FileOutputStream("C:\\temp\\sampleExcel" + System.currentTimeMillis() + ".xls"); // wb.write(out); // out.close(); // // } catch (Exception e) {} // ファイル名を設定 httpServletResponse.setHeader( "Content-Disposition", "attachment; filename=SampleExcel" + System.currentTimeMillis() + ".xls"); //ダウンロードをさせるため「OutputStream」に書き込む try { OutputStream out = httpServletResponse.getOutputStream(); wb.write(out); out.close(); } catch (IOException e) {} // ↑↑↑↑↑ 今回の変更箇所 ↑↑↑↑↑ return null; } }
【Excel出力】ボタンを押すと、保存ダイアログが表示される。
<関連記事>
SeasarプロジェクトでExcelファイルを出力する方法【準備編】
SeasarプロジェクトでExcelファイルを出力する方法【出力編】
SeasarプロジェクトでExcelファイルを出力する方法【ダウンロード編】
SeasarプロジェクトでExcelファイルを出力する方法【明細編】
<お勧め書籍>