ASPでダウンロードファイル名を指定するには?

[上に] [前に] [次に]
蓮子 [E-Mail] 2000/03/03(金) 10:24:44
URL「http://www.hoge.hoge/~youraccount/default.asp/downloadname.lzh?AAA=BBB
で、ダウンロードするファイル名を指定できるかと思ったのですが、
「404 見つかりません」になってしまいます。
全く違っていたらすみません。ASPでダウンロードファイル名を指定する方法を教えて下さい。

>CGI でダウンロードファイル名を指定するには?
../199810/98100024.htm
を参照しました。

s2号 2000/03/03(金) 12:24:25
上記方法はクライアント(ブラウザ)の動作に依るのかな? 初めてみた方法です。

さて、DLさせるファイル名をCGI側で指定するには、HTTPヘッダで以下のように指定します。ASP(ActivePerl)でも動作することは確認済みです。

例えばPerlでの記述。
$filename = 'test.zip';
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$filename\n\n";
print "AAA...."; #ファイルの内容

ちなみに2行目の記述は環境によると思います。一般的にはDLの動作になると思いますけど。
あと、バイナリの受け渡しも考えて、バッファはフラッシュさせて($| = 1;)おいた方がいいかも、です。

ではでは。

s2号 2000/03/03(金) 12:30:09
>ASP(ActivePerl)
ぼけてます。IIS+APでの動作確認でしたっ。(汗

改めてASPで動作確認しましたが、問題ないようです。m(__)m

無責任官庁 2000/03/03(金) 12:57:43
> で、ダウンロードするファイル名を指定できるかと思ったのですが、

PATH_INFO 使うやつですね。IISではできないようです。
(なんでだろ。それで私もハマった…)
なので、URLには

http://www.hoge.hoge/~youraccount/default.asp?downloadname.lzh&AAA=BBB
とでもするしかないでしょう。

蓮子 2000/03/03(金) 13:36:30
s2号さん、無責任官庁さん、ありがとうございます。

>Content-type: Application/vnd.ms-excel-csv
>Content-Disposition: attachment; filename="choki.xls"

を書いてみましたが、やっぱりファイルはdefault.aspでした。
書き方がマズいのでしょうか…。

>http://〜/〜/default.asp?downloadname.lzh&AAA=BBB

こういう書き方もあるのですね。
でも私の環境では「downloadname.lzh&AAA」をキーワード
としてしまうようで、できませんでした。

無責任官庁 2000/03/03(金) 14:59:59
ちょっと状況が把握できないので整理したいのですが。

> ダウンロードするファイル名を指定できるかと思ったのですが
というのは、提示された方法(CGIで言うと PATH_INFO で引数取得する方式)
で default.asp にてダウンロード処理をさせようとしたら、

> 「404 見つかりません」になってしまいます。
で、できなかった、という事では無いのですか?

default.asp で引数を取得して、それをファイル名にしてクライアントに
送信…したいんですよね?

>>http://〜/〜/default.asp?downloadname.lzh&AAA=BBB
>こういう書き方もあるのですね。
>でも私の環境では「downloadname.lzh&AAA」をキーワード

え〜と。AAA=BBB 自体には全く意味が無いので、
必要無いならば入れることはないです。

で、もしIISでFTPの設定ができる(利用できる)なら、
default.asp で downloadname.lzh の名前を取得して、
(default.asp?downloadname.lzh とかやって)
ftp://〜/〜/downloadname.lzh にリダイレクトするのが一番簡単ではあります。

s2号さんの方法をASPでやるには、
DLName = "downloadname.lzh"
Response.AddHeader "Content-Disposition" , " attachment; filename=" & DLName
Response.ContentType = "application/x-binary"
として、そのあと
barray = ←対象ファイルをバイナリ読みして格納
Response.BinaryWrite barray

って感じになりますね。

#ASPって、ActiveServerPage のコトでいいんですよね?(^-^;)

蓮子 2000/03/03(金) 15:37:24
>default.asp で引数を取得して、それをファイル名にしてクライアントに
>送信…したいんですよね?
半分はそうです。呼び出し側からファイル名を引数として渡さなくても、
ASP側で操作できるのならそれでも構わない、ということで半分です。

当初の目的は(先に書くべきでした)、ユーザーがASPを起動するボタンを押すと、
ファイル名を再入力させなくてもエクセルファイルが出力されるようにすることで、
ASP側に
>Content-type: Application/vnd.ms-excel-csv
>このあとファイル内容〜
とだけ書いておくと、ダウンロード時のファイル名の初期値が
ASPやCGIファイルそのものの名前になってしまうのを操作したかったのです。

>#ASPって、ActiveServerPage のコトでいいんですよね?(^-^;)
厳密に言うとASP小細工して構築したモドキのシステムなので、純粋にそれとは言えません。
プログラムの記述方法は違うもののコンパイル(というのかな?)後同じものになるので、
標準ではどのようにするかお聞きして応用したかったのです。ごめんなさい。

無責任官庁 2000/03/03(金) 16:34:52
> ASPやCGIファイルそのものの名前になってしまうのを操作したかったのです。
了解です。
ということは、やはり私の示したASP(の VBScript の)サンプルを
試していただいて…
Response.AddHeader にて Content-Disposition を指定するってやつです。
これはどうでしょうか。

そんで…ってことは…
>>Content-Disposition: attachment; filename="choki.xls"
>を書いてみましたが、〜以下略〜
は、ASPじゃなくてCGIで試したってことかな?

あとあまり関係なさそうだけど、filename="choki.xls" は、
filename=choki.xls でいいと思います。

[上に] [前に] [次に]