アプリ版:「スタンプのみでお礼する」機能のリリースについて

Webページ上のあるボタンを押した時、サーバー上にExcelファイルを作成し、そのファイルをそのままクライアントにダウンロードするプログラムをつくろうとしています。その時、ダウンロードダイアログを表示させ、クライアントが任意の場所に保存できるようにしようと思っています。とりあえずファイルをダウンロードするクラスを下記のように作りました。
public class download {
public static final int EOF=-1;
public void downloader(HttpServletResponse res){
try {
String fileName = "testExcel1.xls";
String CONTENT_TYPE = "application/atom";

res.setContentType(CONTENT_TYPE);
res.setHeader("Content-Disposition", "filename=\""+ fileName +"\"");
URL urlObj=new URL("サーバーアドレス:8080/DB/testExcel.xls");
InputStream in = urlObj.openStream();
FileOutputStream(new File("testExcel1.xls"));
BufferedOutputStream bout= new BufferedOutputStream(res.getOutputStream());
int c;
while( (c = in.read()) != EOF ) {
bout.write(c);
}
bout.flush();
in.close();
} catch (Exception e ) {
e.printStackTrace();
}
}
}
このまま実行するとダウンロードダイアログは表示されず、Excelファイルの内容がクライアントのブラウザ上に表示されてしまします。どうしたらダウンロードダイアログが表示されるようになるでしょうか。アドバイスよろしくお願いします。

A 回答 (2件)

setHeader の filename の前に attachment; を付けてみてはどうですか?



res.setHeader("Content-Disposition", "attachment; filename=\""+ fileName +"\"");
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
アドバイスどおりやったらうまくいきました。今回のような場合IEのほうではやり方が多少違うようですね。大変勉強になりました。

お礼日時:2002/08/06 13:43

あまり自信はないのですが、


MIMEタイプを application/octet-stream としたら
どうですか?

この回答への補足

回答ありがとうございます。
試してみたところ残念ながら結果は変わらなかったです。
String fileName = "testExcel1.xls"; の.xlsをなくすか、適当な拡張子(.demoとか)にするといけるのですがそうすると「名前を付けて保存」ダイアログのデフォルトのファイル名がxlsファイルではなくなくなってしまいます。
また原因を調べてみると
http://www.nishimoto-site.net/archiver/ML/apache …

「IEは "拡張子" を見て動作するような実装と聞いています。
Netscape はきちんと Content-Type: を見るようです。」
という文があったのですが、これが原因ですかね。ちなみにブラウザはIE5.5です。なにかいい方法はあるでしょうか。

補足日時:2002/08/06 10:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!