- PR -

Servletで作ったCSVをダウンロードする。

1
投稿者投稿内容
TI
会議室デビュー日: 2005/05/12
投稿数: 3
投稿日時: 2009-01-14 18:14
クライアント:OS=Windows2000/XP, ブラウザ:IE6/IE7, Excelあり
サーバ:Java6, Tomcat + JSF
の環境で開発しています。


リンクをクリックすると動的にされたCSVをダウンロードしてExcelで表示する部分があるのですが、いくつかの環境だけブラウザの挙動がおかしく困っています。

通常だと「CSVをダウンロード」のリンクをクリックすると「ファイルのダウンロード」のダイアログが出て、ダイアログ上の3つのボタン「開く」、「保存」、「キャンセル」のうち「開く」を押すとExcelが起動してCSVの内容が表示されます。
このときのファイル名は「datasheet.csv」となっています。

問題環境だけは後述のように、ファイルのダウンロードダイアログが2度開くのです。
@同じリンクをクリック。ファイルのダウンロードダイアログが開く
 ファイル名が「"displayResource?graphCsvDlId=23634"」となっている
A「開く」を押すともう一度ファイルのダウンロードダイアログが開く。
 2つめのダイアログではファイル名が「datasheet.csv」となっている。
B2番目のダイアログに対して「開く」を押すと、Excelが起動しCSVが表示される。


どなたか原因などご存知でしたら教えていただけますでしょうか?


[Htmlのソース]
<td><a href="displayResource?graphCsvDlId=23634">CSVをダウンロード</a></td>

[Servletが返すHTMLヘッダ]
ContentType: application/x-csv; charset=Windows-31J
Content-Disposition: attachment; filename = datasheet.csv
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2009-01-14 18:50
問題の起きる起きない各端末のOS、IEのバージョンを並べると
共通点が見つかったはずです。

参考URL
http://support.microsoft.com/default.aspx?scid=kb;ja;238588

結論を言ってしまうと
・GETで要求する
・URLに拡張子を含むファイル名を含める(QueryStringでも可)
・DispositionはATTACHMENT
これで勝てます。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2009-01-14 20:32
Application/ms-excel-csv

↑MIMEつかってみたら?
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2009-01-15 09:28
引用:

汀さんの書き込み (2009-01-14 20:32) より:
Application/ms-excel-csv
↑MIMEつかってみたら?


IEのバージョンが限定されていればそれでいいのですが
複数のバージョンのIEを対照と刷る場合
IEの動作上の不具合のため
ContentTypeだけでは対処できませんので
注意が必要です。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2009-01-15 21:58
ブラウザの挙動は基本的にContents-Typeからですよ。

x-csv が該当のOSにマッピングされてなく発生しているきがしますが。

ms-excel-csvの場合、Excelをインストールした場合必ずマッピングされていたとおもいますが?
TI
会議室デビュー日: 2005/05/12
投稿数: 3
投稿日時: 2009-01-16 14:03
あすか様、汀様、情報頂きありがとうございました。

結果、KB238588に該当するようでブラウザにSPを適用したところ問題なく動作するようになりました。
SPはIE、OSのどちらのものでもOKでした。

原因がわからず非常に困っていたところだったので本当に助かりました。

1

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