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ファイルの内容がクライアントのブラウザ上に表示されてしまします。どうしたらダウンロードダイアログが表示されるようになるでしょうか。アドバイスよろしくお願いします。
No.2ベストアンサー
- 回答日時:
setHeader の filename の前に attachment; を付けてみてはどうですか?
res.setHeader("Content-Disposition", "attachment; filename=\""+ fileName +"\"");
回答ありがとうございます。
アドバイスどおりやったらうまくいきました。今回のような場合IEのほうではやり方が多少違うようですね。大変勉強になりました。
No.1
- 回答日時:
あまり自信はないのですが、
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です。なにかいい方法はあるでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのFTP関数ftp_fgetエラーに...
-
ファイルダウンロードについて
-
ブラウザでExcelをダウンロード...
-
VB.NETのFTPダウンロードについて
-
csvダウンロードについて
-
指定したURLからファイル(PDF...
-
zip圧縮の種類について
-
csvをダウンロードする際、いき...
-
CSVファイルのダウンロード
-
複数ファイルを連続でダウンロード
-
ダウンロードファイル名の文字...
-
phpでPEAR::DBを使っているので...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
php5-extensions を make でき...
-
CFileDialogの最初のディレクト...
-
PHPのみでの背景色は指定できる...
-
リンク先を隠す方法はないでし...
-
2つの画像ファイルが異なるファ...
-
PHPのif文でその処理を途中で抜...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
PHPでファイルのダウンロードす...
-
eclipseでコメントアウトができ...
-
Excelファイルをダウンロード
-
csvをダウンロードする際、いき...
-
phpでうまく画像がダウンロード...
-
指定したURLからファイル(PDF...
-
phpでzipファイルダウンロード...
-
VB.NETのFTPダウンロードについて
-
ファイルのダウンロードのイベ...
-
ダウンロードファイル名の文字...
-
zip圧縮の種類について
-
PHPでファイルのダウンロード判...
-
CSVファイルをダウンロードで文...
-
csvダウンロードについて
-
DelphiのURLDownloadToFile関数...
-
【PHP】ダウンロードサイト作成...
-
ブラウザでExcelをダウンロード...
-
ファイルのダウンロードが出来ない
-
ファイル一覧を表示しその画面...
おすすめ情報