プロが教える店舗&オフィスのセキュリティ対策術

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」でもだめでした。
何かよい知恵をお貸しください。

A 回答 (5件)

これでOK!です。



<%
Response.AddHeader "Content-disposition", "filename=""motteke.csv"""
Response.ContentType="text/csv"
Response.Write "1,2" & vbNewLine
Response.Write "3,4" & vbNewLine
%>

"text/csv"は適当です(笑)
    • good
    • 1
この回答へのお礼

ありがとうございます。
できました。
私も、「Content-disposition」は使ってみたのですが、つづりが違っててできませんでした。(^_^;)

ところで、
Content-disposition; attachment;filename=motteke.csv
という書き方もあるようですが、「attachment」はどうゆう物なのでしょうか?
あるのとないのと、何か違いがあるのでしょうか?

お礼日時:2001/08/07 17:05

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"
    • good
    • 0
この回答へのお礼

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

本当にありがとうございました。

お礼日時:2001/08/09 08:06

ContentTypeに"text/csv"と適当ものを指定してることには理由があります。


IEなんかですと、ContentTypeをまともに見ないのでいいんですが、
Netscapeですと"text/plain"というまともなMIMEを指定すると、
ダウンロードのダイアログが出ず、ブラウザで表示してしまいます。
(IE5.5のSPなしでもバグがあったような)

Content-dispositionの"attachment"はその名の通り添付を意味します。
その他には"inline"があります。

今回の場合はどちらでもなさそうなので省略して
絶対にダウンロードになってほしいなという私の願いがこめられています。
(ファイル名さえ認識してくれればよい)
美しいやり方ではないですね。
    • good
    • 1
この回答へのお礼

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

大変参考になりました。ありがとうございました。

お礼日時:2001/08/08 08:10

以下でいけます



Response.ContentType = "text/plain"
Response.AddHeader "Content-Disposition", "attachment;filename=xxxxxx.csv"
sendtext = "'aaa','bbb'"
Response.Write sendtext
Response.End
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。
私も、「Content-disposition」は使ってみたのですが、つづりが違っててできませんでした。(^_^;)

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

お礼日時:2001/08/07 17:09

こんな感じのASP にするのではどうなのでしょう?



<html>
<head>
<meta HTTP-EQUIV="Content-type" CONTENT="application/vnd.ms-excel">
</head>
<body>
<%
 Response.Write "1,2" & vbNewLine
 ...
%>
</body>
</html>

# 私は計算機屋ですが、ASP は触ったことが無いのではずしているかもしれません。
    • good
    • 0
この回答へのお礼

私もはじめそのような形でしてみました。
が、よく考えれば「<html></html>」の部分ですでにだめなのでは・・・
実際、だめでした。

ですが、早速のお答えありがとうございます。
また、何か在ればよろしくお願いします。

お礼日時:2001/08/07 17:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています