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

このQ&Aに関連する最新のQ&A

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

ご回答ありがとうございます。
確かに、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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QASP Response.Write("401 Unauthorized")での構文記述方法

ASPで「401 Unauthorized」系のダイアログからの認証処理を作成しています。

サイトでのサンプルを見ているのですが、理解に苦しみます。

Response.Write("401 Unauthorized")
上記の記述で、ダイアログを表示することは分かったのですが、ダイアログの、「ユーザー名」・「パスワード」の値を取得するにはどのように記述すればよいのでしょうか?

ASPは全くの不慣れなので、この他にも質問を投稿しております、ASPなら・・・というお方がおりましたら合わせてご教授お願いいたします。

Aベストアンサー

以下のWebページのBasic認証についての解説が参考になるかと。

ただしここらへん、どうやってプログラミングしたらよいか分からない(あるいは面倒だ)と思ったら、素直にIISの認証メカニズムにまかせてしまったほうが良いでしょう

参考URL:http://www.atmarkit.co.jp/fnetwork/rensai/netpro02/netpro01.html

QASPでCSVファイルのダウンロード

ASPでオラクル上のレコードを書き出したCSVファイルをダウンロードするページを作成しました。
あるフィールドに半角カンマが入ったレコードが存在したため、その行だけ列がずれてしまいました。

そのCSVファイルはAccessで作成したプログラムで取り込みます。インポート定義で、半角カンマをフィールドの区切りに設定してあります。

Accessでの読み込みエラーを回避するために、フィールド中の半角カンマを全角カンマに置換してCSVファイルを作成したいのです。
ASP上で、Replace関数を使用してみましたが、半角カンマが引数の区切りと認識されたり、シングルクオーテーションもコメントとして認識されたりしてうまくいきません。


Response.write Replace(rs("フィールド1"),",",",") & "," & rs("フィールド2") & vbNewLine

※rsはレコードセットです。

どなたか解決方法を知っていらっしゃる方、ご教授願います。

Aベストアンサー

こんにちは。

最初に一言。
CSVで出力するデータに半角カンマが入ってる、っていうのはよくないですね^^;
#1さんがおっしゃる通り、区切り記号を使うのが一般的なやり方です。

今回は、Accessで作成したプログラム(マクロでしょうか?)で取り込むとのこと。
区切り記号を使えるかどうかは、Access側の仕様によりますから、微妙です。

OracleでReplace関数を使ってみたらいかがですか?
(動作確認済です。)


SELECT REPLACE(フィールド1,',',',') , フィールド2
FROM ~
WHERE ~


どうしてもASPに頼ってしまいますが、OracleのSQL関数も意外に使えますので、これからもぜひお試し下さい。

QCSVファイルをサーバからクライアントへダウンロードする方法

ASP初心者です。
下記のようにサーバのローカル上に保存されたCSVファイルをクライアントの方にダウンロードさせるにはどうしたらいいでしょうか?
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objText = objFS.CreateTextFile("C:\" & rizu_id2 & ".csv")
objText.WriteLine("リスト種別,親種別,指図番号,枝番,ユーザ名,リスト来歴番号,リスト来歴日付,内容,リスト来歴作成者,リスト来歴承認者,AN-80,DIC547(旧色),日塗工S44-257(安全色),日塗工S44-257(梯子手摺),指定色:本体,安全色,梯子手摺,制御盤外面色,制御盤内面色,リレー板色,艶有り,半艶,親機種コード,親名称,親図面番号,親型式,作成年月,図面リスト作成者,図面リスト承認者,電源電圧,50Hz,60Hz,操作電圧,特記事項")
objText.WriteLine(""& ristsyu & "," & osyu & "," & sashi & "," & edaban & "," & yumei & "," & rirano & "," & riradate & "," & na & "," & ritanto & "," & risyonin &"," & an & "," & dic & "," & nitosa & "," & nitola & "," & mainc & "," & safec & "," & lad & "," & contout & "," & contin & "," & rico & "," & gloss & "," & hgloss & "," & okisyu & "," & oname & "," & ozu_id & "," & okata & "," & yerman & "," & tanto & "," & syo & "," & po & "," & hzg & "," & hzr & "," & op & "," & ct &"")
objText.WriteLine("順序,子図面番号,子サイズ,子分類コード,子種別,子名称,子型式,単数,製作数,子備考,子来歴番号")
objText.WriteLine(""& fla & "," & kzu & "," & ksize & "," & kbu & "," & ksyu & "," & koname & "," & kkata & "," & ksu & "," & sei & "," & kbi &"," & krai & "")
objText.Close

以上、宜しくお願い致します。

ASP初心者です。
下記のようにサーバのローカル上に保存されたCSVファイルをクライアントの方にダウンロードさせるにはどうしたらいいでしょうか?
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objText = objFS.CreateTextFile("C:\" & rizu_id2 & ".csv")
objText.WriteLine("リスト種別,親種別,指図番号,枝番,ユーザ名,リスト来歴番号,リスト来歴日付,内容,リスト来歴作成者,リスト来歴承認者,AN-80,DIC547(旧色),日塗工S44-257(安全色),日塗工S44-257(梯子手摺),指定色:本体,安...続きを読む

Aベストアンサー

#2です、こんにちは。

リンクタグで、拡張子がCSVをダウンロードする場合は、ユーザに左クリックさせないことが重要です^^;
IEの場合は、右クリックして【対象をファイルに保存】して下さい、等書かないと前述した個々のクライアントの環境の問題が出ます。

私が開発した時は「左クリックでCSVをダウンロードできないか。」という要望が顧客から出て、
プログラムでブラウザを判定して、ブラウザごとにロジックを変えて対応しましたが、、、
ブラウザのバージョンが変わるたびに、ブラウザの動きが変わったりするので、メンテナンスが大変ですし、想定外のブラウザでの誤動作も怖いですし。


> その中で、リンクというと<A HREF~が思いつくのですが、
> サーバ保存したファイル名をどのようにして見つければ良いのかわかりません。


保存場所は、もちろんわかるんですよね?
実行ファイル(asp)とCSVファイルが同じフォルダ内でしたら
<a href='a.csv'>ダウンロード</a>

別のフォルダの場合。
例えば、C:\Inetpub\wwwroot\a.aspを実行していて、C:\Inetpub\a.csvをダウンロードする場合は
<a href='../a.csv'>ダウンロード</a>

C:\Inetpub\wwwroot\a.aspを実行していて、C:\Inetpub\wwwroot\data\a.csvをダウンロードする場合は
<a href='data/a.csv'>ダウンロード</a>


外部公開しているサーバでしたら、ダウンロード後は削除するようなロジックを入れる方がセキュリティ的に○ですね。

#2です、こんにちは。

リンクタグで、拡張子がCSVをダウンロードする場合は、ユーザに左クリックさせないことが重要です^^;
IEの場合は、右クリックして【対象をファイルに保存】して下さい、等書かないと前述した個々のクライアントの環境の問題が出ます。

私が開発した時は「左クリックでCSVをダウンロードできないか。」という要望が顧客から出て、
プログラムでブラウザを判定して、ブラウザごとにロジックを変えて対応しましたが、、、
ブラウザのバージョンが変わるたびに、ブラウザの動きが変...続きを読む

QResponse.Write(変数)

Response.Writeの意味をわかりやすく教えてください!!

Aベストアンサー

「サーバがクライアントにデータを返し、ブラウザに表示する」とかじゃなくて?

Q.NET ASP クライアント側でファイルの保存

.Net でWebのアプリケーションを作成しています。

サーバー側にあるデータを、クライアントにTXTファイルとして提供したいのですが、方法が良く分かりません。

System.IOを使おうとしたのですが、サーバにアクセスする権利がないとエラーになり、作成できません。

サーバ側のファイルにアクセス権をつけたりせず、データだけを、クライアントに渡して、ファイルにしたいのですが、できないのでしょうか?

Aベストアンサー

ダウンロード画面を出すということであれば

参考URL:http://www.ailight.jp/ASPDownload.aspx


このQ&Aを見た人がよく見るQ&A

おすすめ情報