- PR -

ファイルのダウンロードの件です

1
投稿者投稿内容
がんこチーム
会議室デビュー日: 2004/09/08
投稿数: 15
投稿日時: 2004-12-17 10:25
いつも、お世話になってます。
サーブレットでファイルのダウンロードプログラムを作成しているのですが、IEで、サーブレットにアクセス後、ファイルのダウンロードのダイアルボックスが現れて「開く」を押すと、再度ファイルのダウンロードのダイアルボックスが現れてしまいます。そして、二回目のダイアルボックスで「開く」を選択するとファイルを開くことが出来ます。
一回目のダイアルボックスで「保存」を選択すると二回目のダイアルボックスは出ることなく保存が出来ます。
なぜ「開く」を選択すると二回もダイアルボックスが表示されるのか、自分では原因がわからないのでよろしくお願いします。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/octet-stream;charset=Windows-31J");
response.setHeader("Content-Disposition","attachment; filename=dwh");
PrintWriter out=response.getWriter();
out.print("ダウンロード情報");
}
_________________
がんこチーム
会議室デビュー日: 2004/09/08
投稿数: 15
投稿日時: 2004-12-17 10:40
すいません。とりあえず、原因を発見したので合っているか教えてください。

原因
サーブレットにたいしてPOSTでアクセスしていたため。
doPostのソース
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}

結論
クライアントがPostでファイルをダウンロードしようとした時は、「開く」を選択すると二回ダイアルボックスが表示されてしまう。

でよろしいでしょうか?
kakkun
会議室デビュー日: 2004/12/08
投稿数: 6
投稿日時: 2004-12-17 11:29
こんにちは。
私も同じような現象に悩まされたことがあります。
恐らく、ContentTypeをうまく定義すれば回避できたかと思います。
私の場合はExcelでしたので、下のような定義になります。
HttpServletResponse.setContentType("application/vnd.ms-excel; charset=MS932");
HttpServletResponse.setHeader("Content-disponsition", "attachment:filename=\"QR_LIST.xls\"");

ブラウザのソース表示ではこの辺りの情報までは参照できないので、
横取り丸というソフトを使うと、1回目、2回目の違いが分かったような気がします。
1

スキルアップ/キャリアアップ(JOB@IT)