- PR -

サーブレットでファイルのダウンロード

1
投稿者投稿内容
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-04-10 12:04
Javaサーブレットでファイルをダウンロードさせようとしているのですが、ちょっと困ったことが起きています。

拡張子が、DTDのファイルをダウンロードさせようとしているのですが、IEの場合ファイル名に勝手に".xml"が追加されてしまいます。

例えば、以下のような単純に静的なページでも同様のことが起きます。

http://hogehoge/tmp/test1.dtd

のリンクを「対象をファイルに保存」で保存させると、ファイルの種類が勝手に「XML Document」となってしまい(ファイルの関連付けも消しているので、クライアントでXMLだと認識させる情報は何もないはずなのに…)、ファイル名が「test1.dtd.xml」となってしまいます。
また、ファイルの種類を「全てのファイル」にすると、なぜかファイル名が「test1.dtd..xml」になってしまっています。(なぜか"."が2つ付く)


Internet Explorer 5.5SP2 で試しています。
(ちなみに Netscape 4.78 では、上記の現象は起きません。)

なぜ、こういうことになってしまうのでしょうか?

クライアントに返すHTTPヘッダの Content-type を
application/octet-stream
application/xml-dtd
と変えてみたのですが、同じでした。

サーブレットおよび アプリケーションサーバ(Tomcat3.3 と INTERSTAGEで試しています) の設定等で逃げる方法はないのでしょうか?



あと、ついでにといっては何なのですが、ファイルのダウンロードのダイアログで、「このファイルを上記の場所から開く」を選択不可にして、「このファイルをディスクに保存する」だけ選択させるようにはできないでしょうか?
(時々、インターネット上でそうなっているのを見かけるのですが、どうやっているのでしょうか?違いがよく分かりませんでした。)


[ メッセージ編集済み 編集者: ふうた 編集日時 2002-04-10 12:14 ]
ふうた
大ベテラン
会議室デビュー日: 2001/08/23
投稿数: 198
お住まい・勤務地: 岡山
投稿日時: 2002-04-10 15:25
DTD ファイルの先頭行にある
<?xml version="1.0" encoding="UTF-8"?>
を消すと、状況が変わるようです。
(IEはこの宣言を見て判断しているようです。)

この宣言は必須ではないので、消してみました。
(文字コードは、UTF-8で書いていますし…)

ただ、これだけだと、.xml が .txt になるだけなので、クライアントに返す Content-Type を aplication/xml-dtd とすると、ファイルの種類が 「.dtdドキュメント」になって、拡張子がDTDで保存できました。



逆にネットスケープの場合に、保存する時に「未定義のファイルタイプです」というダイアログが出てしまいます。ただ、ここでファイルに保存を選べば、ファイル名も問題なく保存できるので、注意書きレベルで対応できると思います。


それにしても、IEは親切心でやってくれているのかもしれないけど、かなりお節介ですねぇ・・・(ファイルの中身まで見て、拡張子を決めるなんて・・・)
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2002-04-11 09:05
私も以前にServlet/JSPからCSVファイルをダウンロードさせる
Webアプリを開発したのですが、同様のIEのありがたいおせっかいに
よって意図しない動作が発生しました。

具体的には、クライアントによって
 1.ダウンロードダイアログが開く(正常にダウンロード可能)
 2.ダウンロードダイアログが開かずに勝手にExcelで表示。
の2パターンの現象が発生しました。
そこでExcelで開かないようにCSVファイルとExcelの関連付けを
削除したのですが、今度はベタのテキストとして表示するようになって
しまって・・・困りました。

要はダウンロードダイアログが開いてくれればいいのですが、
一回でもダウンロードダイアログで
 □今後、このファイルに関してはダイアログを表示しない
  (↑詳細な文言は忘れました(^^;)
をチェックしてしまうと、そのクライアント(IE)では2度とダウンロード
ダイアログを開く事ができなくなってしまいます。

そこで、便乗して質問なのですが、IEで上記現象が発生した場合、
再度ダウンロードダイアログを開くように戻す事はできないのでしょうか?
色々なIEのオプション等を見てみたのですが、それらしきが見つかり
ませんでした・・・ご存知の方がいらっしゃいましたらご教授下さい。
Dee
常連さん
会議室デビュー日: 2002/03/05
投稿数: 28
投稿日時: 2002-04-11 09:48
Deeです
以前クライアントに書いた設定書より抜粋しますと:)

Windows2000だと
エクスプローラの[ツール]-[フォルダオプション]-[ファイルタイプ]で[DOC Microsoft Word文書]等を選択し、[詳細設定]ボタンを押します。
Windows9xだと
エクスプローラの[表示]-[フォルダオプション]-[ファイルの種類]で[DOC Microsoft Word文書]等を選択し、[編集]ボタンを押します。

[ダウンロード後に開く確認をする]をオンにすればダウンロードダイアログを再び表示させることができます。

ちなみに、同じ画面で[同じウィンドウで開く]をオフにすると、ブラウザ内のインプレース表示(ブラウザウィンドウ内でWordやExcelが動作する)が無効になり、外部のウィンドウで開くようになります。



[ メッセージ編集済み 編集者: Dee 編集日時 2002-04-11 09:48 ]
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2002-04-11 13:07
>>Deeさん
ご回答ありがとうございます。
「ダウンロード後に開く確認をする」だったとは・・・盲点でした。
# 一般ユーザならともかく、開発者の端くれとして恥ずかしい・・・

「同じウィンドウで開く」もそう言う意味だったんですね、納得です。
ありがとうございました。
1

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