• ベストアンサー

ASPでCSVファイルを作成しダウンロードさせる

ASPファイルで、動的にCSVファイルを作成し、クライアントにダウンロードさせたいのですが、実際には、ファイルは作成せずに、ASPで直接、CSVフォーマットのファイルをダウンロードさせているように振舞わせることはできないでしょうか? 手順 クライアント        サーバー あるURL(A.ASP)にアクセス              A.ASPのスクリプトでCSVフォーマットを作成              クライアントに送信(多分、Response.Writeで) ダウンロードダイアログが開く 「A.CSVをダウンロードしますか?」 のような感じ ダウンロード、またはExcelが開く というようなイメージです。 CSVファイルを作ってしまうと、複数のユーザーからほぼ同時に要求があった場合、望むCSVにならない可能性があり、また、毎回ファイル名を変えると、Webサーバー上にCSVファイルが沢山できてしまうため、何とかこの方法でやりたいのですが、何かよい方法はありませんでしょうか? ちなみに次のようなASPファイルをしてみましたが、うまくいきません。 <% Response.Content-Type="application/vnd.ms-excel" Response.Write "1,2" & vbNewLine Response.Write "3,4" & vbNewLine %> また、「vnd.ms-excel」を「oct-stream」でもだめでした。 何かよい知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mkii
  • ベストアンサー率40% (43/105)
回答No.2

これでOK!です。 <% Response.AddHeader "Content-disposition", "filename=""motteke.csv""" Response.ContentType="text/csv" Response.Write "1,2" & vbNewLine Response.Write "3,4" & vbNewLine %> "text/csv"は適当です(笑)

msystem
質問者

お礼

ありがとうございます。 できました。 私も、「Content-disposition」は使ってみたのですが、つづりが違っててできませんでした。(^_^;) ところで、 Content-disposition; attachment;filename=motteke.csv という書き方もあるようですが、「attachment」はどうゆう物なのでしょうか? あるのとないのと、何か違いがあるのでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • mann555
  • ベストアンサー率46% (29/62)
回答No.5

ContentType,attachmentに関してはmkiiさんが解説しているので割愛します。 IEのBugはBinary Dataの時に発生するようですね。(5.5では出ないかも.....) ContentTypeを以下のようにすれば回避できます。 Response.ContentType = "application/octet-stream-dummy; name=file1.exe" IE以外の場合は Response.ContentType = "application/octet-stream; name=file1.exe"

msystem
質問者

お礼

IEのBugは、バイナリデータの時ですか。参考になります。 今は、まだ、バイナリデータのダウンロードは必要がないですが、将来のときのためにきっちり覚えておくようにします。 本当にありがとうございました。

すると、全ての回答が全文表示されます。
  • mkii
  • ベストアンサー率40% (43/105)
回答No.4

ContentTypeに"text/csv"と適当ものを指定してることには理由があります。 IEなんかですと、ContentTypeをまともに見ないのでいいんですが、 Netscapeですと"text/plain"というまともなMIMEを指定すると、 ダウンロードのダイアログが出ず、ブラウザで表示してしまいます。 (IE5.5のSPなしでもバグがあったような) Content-dispositionの"attachment"はその名の通り添付を意味します。 その他には"inline"があります。 今回の場合はどちらでもなさそうなので省略して 絶対にダウンロードになってほしいなという私の願いがこめられています。 (ファイル名さえ認識してくれればよい) 美しいやり方ではないですね。

msystem
質問者

お礼

ご回答ありがとうございます。 確かに、ContentTypeは使い方が難しいですね。 特にIEは、ContentTypeにほとんど関係がないというところは、プラットフォームに依存しないシステムを作る際には、大きな障害になりますね。 大変参考になりました。ありがとうございました。

すると、全ての回答が全文表示されます。
  • mann555
  • ベストアンサー率46% (29/62)
回答No.3

以下でいけます Response.ContentType = "text/plain" Response.AddHeader "Content-Disposition", "attachment;filename=xxxxxx.csv" sendtext = "'aaa','bbb'" Response.Write sendtext Response.End

msystem
質問者

お礼

ありがとうございます。 できました。 私も、「Content-disposition」は使ってみたのですが、つづりが違っててできませんでした。(^_^;) ところで、 Content-disposition; attachment;filename=xxxx.csv という書き方もあるようですが、「attachment」はどうゆう物なのでしょうか? あるのとないのと、何か違いがあるのでしょうか? それと、「ContentType」は、やはり「text/plain」が一番いいでしょうか? ContentType自身は、昔は自由に決めることができた(今も?)と聞いたことがあるので難しいですが、どこかに参考になるような資料はないでしょうか?

すると、全ての回答が全文表示されます。
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

こんな感じのASP にするのではどうなのでしょう? <html> <head> <meta HTTP-EQUIV="Content-type" CONTENT="application/vnd.ms-excel"> </head> <body> <%  Response.Write "1,2" & vbNewLine  ... %> </body> </html> # 私は計算機屋ですが、ASP は触ったことが無いのではずしているかもしれません。

msystem
質問者

お礼

私もはじめそのような形でしてみました。 が、よく考えれば「<html></html>」の部分ですでにだめなのでは・・・ 実際、だめでした。 ですが、早速のお答えありがとうございます。 また、何か在ればよろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A