@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

xp+sp2上のWEBからのCSVダウンロードについて

投稿者投稿内容
gaucho
会議室デビュー日: 2004/09/15
投稿数: 8
投稿日時: 2005-06-16 15:01
いつもお世話になっております。

現在、以下の環境でASPのWebシステムを開発しております。
OS:WinXP+SP2
IIS:5.01

PGで作成したCSVファイルへのハイパーリンクを
画面に置いて、ユーザがリンクをクリックすると、
CSVファイルをダウンロードする、というありがちな
画面を作っています。

ハイパーリンクの内容は"http://xxxx/yyyy/zzz.csv"
のようになっているのですが、
1.ダウンロード画面が表示。ここでファイル名が
"zzz.xls"になっている。
2.”保存”をクリックし、”名前を付けて保存”画面
  でも"zzz.xls"になっている。
3.そのまま保存すると"zzz.xls"として保存される。
という現象が出ています。

2.の画面で保存ファイル名に"zzz.csv"と指定すると、
csv形式で保存できるのですが、ダウンロード画面で
勝手にxls形式で保存しようとするのは何故か?と
悩んでおります。

◆試してみた事
 1.環境をNTServerに移して試してみました。
   →csv形式で保存できました。どうやらXP+SP2環境で
    起こる現象かもしれない、と思っています。
 2.画面上にボタンを配置し、ボタンアクションで
   csvファイルへリダイレクトするようにしてみました。
   →やはりxls形式で保存しようとしています。
 3.クライアントPCのフォルダオプションで拡張子CSVと
   EXCELの関連づけを外してみた(NOTEPADに変更した)。
   →やはり、同じくxls形式で保存しようとしています。

◆調べた事
 フォルダオプション内のCSV、XLSの”ファイルの種類”を
 調べました。
 CSV … 「ダウンロード後に開く確認をする」にチェック有
 XLS … 「ダウンロード後に開く確認をする」にチェック有


どうすれば、csvファイルをそのままダウンロードできるの
でしょうか?ご存じの方おられましたら、アドバイスよろしく
お願いします。

#先日まで別の掲示板で聞いておりましたが、Resが付かなかった
#ため、削除してここに掲載させて頂きました。
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2005-06-16 17:55
カウンターです。

自分も下記の環境で開発してます。
OS:WinXP+SP2
IIS:5.01

特に問題なく、CSVを作成→DL出来ましたよ。
どのような方法で行っているのでしょうか?
gaucho
会議室デビュー日: 2004/09/15
投稿数: 8
投稿日時: 2005-06-16 18:02
お返事ありがとうございます。

DL出来てるんですか?それでは、XP+SP2の問題じゃないかも
知れないです(とりあえず2台試して2台ともで再現したのですが)。
#http://bbs.hotfix.jp/ShowPost.aspx?PostID=1830
#↑こんな記事もありましたので、XP+SP2ではダウンロードの挙動が
#違うものだと、早合点しておりました。

やっている事は、csvファイルのリンクを貼っているだけ
なんです。
それと、”ファイル名を指定して実行”から
URL「http://xxxx/yyyy/zzz.csv」を直打ちしても
ダウンロード画面では"zzz.xls"になってしまいます。

IISの設定でどこかあやしいところがあるのでしょうか・・・。
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2005-06-17 09:28
おはようございます。
カウンターです。

ちなみに私は、CSV作成とDLを行うクラスを作成して、ボタンでダウンロードさせてます。

コード:

pRes.AddHeader("Content-Disposition", "attachment;filename=" & System.Web.HttpUtility.UrlEncode("○○○.csv"))
pRes.ContentType = "application/octet-stream"
///CSV作成処理
pRes.BinaryWrite(pEncording.GetBytes(strCSV))
pRes.End()

※pEncording・・・エンコード
※pRes・・・Httpレスポンス



ってな、感じです。

[ メッセージ編集済み 編集者: カウンター 編集日時 2005-06-20 09:19 ]
gaucho
会議室デビュー日: 2004/09/15
投稿数: 8
投稿日時: 2005-06-18 16:08
返事遅くなりましてすみません。

教えて頂いた方法を参考にしてサンプルを作成したら
csvをダウンロードできました。

ただ、これは、”csv作成”→”ダウンロード”と連続で
行うのですよね。私の場合、既に存在するCSVファイルに
対してのダウンロードがしたいのです。

これは仕様を変えて対応できる範囲なので、この方法も
有りかとは思いますが、どうしてcsvファイルへのリンクを
クリックするとxls形式で保存できるのか?この疑問を
解決したい、という気持ちもあります。

以上、よろしくお願い致します。
masa
大ベテラン
会議室デビュー日: 2005/05/11
投稿数: 108
投稿日時: 2005-06-19 23:17
引用:

gauchoさんの書き込み (2005-06-16 15:01) より:
◆試してみた事
 1.環境をNTServerに移して試してみました。
   →csv形式で保存できました。どうやらXP+SP2環境で
    起こる現象かもしれない、と思っています。



原因がクライアント側にあるのか、サーバ側にあるかの
切り分けを行うことが大事だと思います。

1. IE以外のブラウザからアクセスした際に、同様の現象が起こるか。
2. サーバをNT環境で動作させた際にXP+SP2のクライアント(IE)で
アクセスした際に、同様の現象が起こるか。

#http://bbs.hotfix.jp/ShowPost.aspx?PostID=1830
このバグについては私もテストしてみましたが、ファイルの拡張子
まで変更してしまう程、悪質なものではないようです。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-06-20 01:08
こんばんは。
Windows系は専門ではないのですが、Webサーバに絡んだ話として…

これは Content-Type ( MIME Type ) の問題ではないでしょうか?
つまり、xls ファイルに対応した Content-Type でコンテンツが発信されるため、URL上の拡張子 csv が無視されて、xls という拡張子が付けられてしまうという…。

たとえば、カウンターさんの例のように、Content-Type として、application/octet-stream を割り当ててみるのは如何でしょうか?

以上、ご参考まで。
gaucho
会議室デビュー日: 2004/09/15
投稿数: 8
投稿日時: 2005-06-20 10:24
masaさん、angelさんありがとうございます。

masaさんのおっしゃる通り、改めて切り分けをすべく
動作を試してみました。

・クライアント
A.WinXp+Sp2 IE6.0
B.WinXp+Sp2 Firefox
C.WinMe IE6.0

・Webサーバ
 (1)WinXp+Sp2
  A.拡張子"xls"で保存
  B.拡張子"csv"で保存 
  C.拡張子"xls"で保存
 (2)Win2000Server
  A.拡張子"csv"で保存
  B.拡張子"csv"で保存
  C.拡張子"csv"で保存
 (3)Win2003Server
  A.拡張子"csv"で保存
  B.拡張子"csv"で保存
  C.拡張子"csv"で保存

(1)のB.での結果が意外でしたが、少なくともWinXp+Sp2をWebサーバに
しない場合はこの現象は見られません。


masaさんのアドバイスを参考にして、
IISのプロパティよりMIMEマップに以下の項目を登録しました。
拡張子・・・csv
MIME・・・application/octet-stream
これでダウンロードすると拡張子csvでダウンロードすることが
できました。

これはXP+SP2ではcsvはMIME登録されていないから、勝手に
xlsと解釈したって事なんでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;ja;246068
ここを参考にMIMEを一覧表示してみましたが、
WinXp+Sp2   … csvのMIME登録無し
Win2000Server … csvのMIME登録無し
Win2003Server … csvのMIME登録有り(application/octet-stream)
となっていました。
WinXpとWin2000ServerではMIME登録が無くても動きが違うのは
WinXPの性格(?)みたいなものなんでしょうか。
#個人的にはWin2003ServerにはデフォルトでcsvがMIME登録されて
#いるところに興味を持ちましたが・・・。

一応今回の件、私の中では
”WinXp+Sp2をWebサーバとして使う場合、csvのダウンロードを行うには
明示的にMIMEの登録を行う必要がある”と結論付けようと思います。

皆様にはお世話になりました。
また、私の結論に対して何か補足や意見等ありましたら
お願い致します。

以上

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