ユーザがダウンロードするExcelファイルをブラウザ内で表示させない

javaでダウンロード機能を作る際に、ユーザがダウンロードするExcelファイルをブラウザ内で表示させない方法をメモしておく。

結論は、レスポンスのヘッダーにContent-Dispositionを設定すること。
逆に、ブラウザ内に表示させる場合は、設定しなければよい。
具体的には下記を設定すれば、ブラウザ内に表示される*1

■ダウンロードファイルをブラウザ内に表示させないためのレスポンスヘッダの指定
Content-Disposition: attachment; filename=fname.ext

ところで、Content-Dispositionやattachmentパラメータは、どのような意味を持つのだろうか。msdnのページでの説明を引用する。

■Content-Dispositionについて
Content-Dispositionは、MIME ユーザー エージェントに対して添付ファイルの表示、処理方法を指示する MIME プロトコル拡張機能

■attachment引数について
"attachment" 引数は、対象のファイルをディスクに保存するよう、ユーザー エージェント (この資料では Internet Explorer) に指示します。

なお、Javaのダウンロード用のservletでは、下記のようにしてレスポンスヘッダを指定すればよい。

res.setContentType("application/vnd.ms-excel");
res.setHeader("Content-Disposition","attachment; filename=\"" + fileOut.getName() + "\"");

*1:IE8ではブラウザ内に表示されたが、chrome11とfirefox4ではダウンロードされた。