- - PR -
ブラウザでのファイルダウンロード時にContentTypeが無視される
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-22 00:53
いつもお世話になります、わかです。
struts にて、データベースにBLOB形式で格納した画像(jpeg)やExcelファイルのダウンロードを 行いたいと考えています。 環境 JDK 1.5.0_06 struts 1.2.9 tomcat 5.5.17 以下は、該当のコード部分です
ダウンロードされるファイルの種類に関わらず、 ブラウザにて「ファイルのダウンロード」ダイアログが表示されることを期待しているのですが、 バイナリとして取り出されるデータの種類によっては、「ファイルのダウンロード」が表示されず、ブラウザ上でデータが展開されてしまいます。 # application/octet-stream の指定だけでは不足なのでしょうか? 同様の事例を経験されたことのある方、ポインタのみでもかまいませんので、 アドバイス頂ければ幸いです。 最後までお読みいただき、ありがとうございました。 | ||||||||||||||||
|
投稿日時: 2006-07-22 00:59
自分も同様の経験があります。
application/octet-stream は 正式な MIME タイプのため 環境によってはブラウザで表示されてしまうことがあります。 application/octet-stream-dummy のように 実際には存在しないMIME タイプを設定すれば解決できると思います。 自分の場合はそれで解決できました。 | ||||||||||||||||
|
投稿日時: 2006-07-22 13:30
未記入さん、アドバイスありがとうございます。
上記のコードを
と書き換えてみましたが、現象は変化せず、同様にブラウザ上で展開される場合があります。 試したファイルの拡張子は「lzh」、「jpg」、「zip」及び「txt」です。 上記のうち、lzhはバイナリデータが強引に文字列に変換され、ブラウザ上に表示され、 jpgはブラウザ内に画像として表示されました。 zip及びtxtについては、「ファイルのダウンロード」ダイアログが表示されました。(=期待する動作) 何か見落としている点がありますでしょうか。 お気づきになられた点があれば、ご指摘頂ければ幸いです。 ブラウザの環境 Microsoft Internet Explorer 6 SP2 [ メッセージ編集済み 編集者: わか 編集日時 2006-07-22 13:31 ] | ||||||||||||||||
|
投稿日時: 2006-07-22 17:36
これは良くありません。 解決できれば良いというものではないのですよ。 下記の例のように、レスポンスヘッダーに「attachment」の指定をするだけです。 https://www.stackasterisk.jp/tech/java/download01_01.jsp こんなのJavaに限ったことではないです。 ![]() | ||||||||||||||||
|
投稿日時: 2006-07-23 22:21
解決の過程は記載していませんが 自分でもいろいろ試したり、同様の現象をググったりして見つけたものであって 別に解決できればいいという意味ではないです。 また、レスポンスヘッダーに「attachment」の指定をするだけです。 と書いていますが、サンプルコードにはすでにその記載がされていて、 (見た限りはコードが間違っているようには見えません) それでも解決できないという質問ではないでしょうか。 | ||||||||||||||||
|
投稿日時: 2006-07-23 23:28
恐らく レスポンスヘッダーに正しく「attachment」と「contentType」の指定をするだけです。 と言いたかったのでは? どちらにせよtakuさんが提示してくださったURIのページに に回答が載っていますね。 | ||||||||||||||||
|
投稿日時: 2006-07-24 09:07
strutsをご使用ということはダウンロード対象のURLが ????.do になっているのではないですか?
IE6SP2は拡張子付きのURLからのダウンロードの時は拡張子無しのURLからのダウンロードと挙動が違います(セキュリティパッチの適用によって時々動作が変わりますが)。 attachment,content-Typeの設定を行ってもまだうまくいかないなら、ブラウザらからのリクエスト先は拡張子無しのサーブレットにしておき、そのサーブレットから、strutsのアクションへ forwardすることで対応できるかもしれません。 # 過去にも何度か strutsでファイルのダウンロードがうまくいかない話題が出ています。検索してみて下さい | ||||||||||||||||
|
投稿日時: 2006-07-24 21:24
みなさま、アドバイスありがとうございます。
以下の方法で解決(=content-typeに関わらず、ファイルのダウンロードダイアログを表示させる)しましたので、報告します。 私が試した手順は 1)Strutsのservlet-mappingを変更 /WEB-INF/web.xml を
を
に変更しました。 2)setContentTypeを行うタイミングを変更
を
に変更しました。 どなたかの参考となれば幸いです。 ありがとうございました。 |