- ベストアンサー
CSVファイルをサーバからクライアントへダウンロードする方法
- ASP初心者のため、サーバ上のCSVファイルをクライアントにダウンロードする方法について教えてください。
- CSVファイルのダウンロード方法について、ASP初心者の私に手順を教えていただけませんか?
- サーバに保存されたCSVファイルをクライアントにダウンロードする方法を教えてください。ASPの初心者です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#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> 外部公開しているサーバでしたら、ダウンロード後は削除するようなロジックを入れる方がセキュリティ的に○ですね。
その他の回答 (3)
- blood_kazuaki
- ベストアンサー率40% (39/96)
#2です。 補足ありがとうございました。 私の方が難しく考えすぎたのかも^^; 質問の通りだったのですね。 ダウンロードさせる際は、サーバにファイル出力後に、 サーバ保存したファイルを自動的にダウンロードさせる、ということでしょうか。 リンクをクリックしてもらう、という手法ではないんですよね? サーバに保存したものを自動的にダウンロード~というやり方は、私の知る限りではないと思います。 頑張ればできますが、、、 1)WriteLineでサーバ保存 2)ReadLine等で(1)のファイルを開いて読み込み、octet-streamで出力してクライアントにダウンロードさせる。 このような格好悪い方法でしたら、可能ですが、、、 (#1さんのやり方と同じになります。) CSVの話は、対象となるクライアントによって動きが変わってきます。 業務端末のような環境が絞られているクライアントならいいのですが、 どんな環境でも動くようにCSVをダウンロードする、というのはおそらく不可能でしょう。 同じOSでも、Officeのバージョンによって動きが変わったりもします。 拡張子を変更してdat等にすると、問題なくダウンロードさせることが可能だったりします。
補足
御回答有難う御座いました。 本当のところは、サーバにファイル出力後に、サーバ保存したファイルを自動的にダウンロードさせる事が出来れば最高なのですが、非常に難しいという事ですので、回答の中にも記載して頂いているリンクをクリックしてもらう方法で作成したいと考えております。 行いたい内容として、 1.あるボタンをクリックすると、サーバ側のあるフォルダに、CSVファイルを作成します。(仮にこれをA.CSVとします。) 2.次に画面が変わって、A.CSVファイルのリンクボタンが表示されるようにする。 3.最後にエンドユーザにてそのリンクボタンをクリックしてもらい、所望のフォルダにA.CSVファイルを保存してもらう。 その中で、リンクというと<A HREF~が思いつくのですが、サーバ保存したファイル名をどのようにして見つければ良いのかわかりません。 申し訳ありませんがご教授の程宜しくお願い致します。
- blood_kazuaki
- ベストアンサー率40% (39/96)
こんにちは。 CSVには散々悩まされている開発者です(苦笑 拡張子がCSVのファイルをダウンロードさせるのは、やっかいですよ^^; > おっしゃる通り行ってみましたが、ダウンロードさせたCSVファイルを確認すると、 > リンクのようになってしまってカンマ区切りにならなくなってしまいました。 これじゃ、ちょっと障害の状況がつかめないのですが。。。 どちらにしろ、#1さんのやり方はサーバに保存しない方法ですので。。。 あなたの質問は、質問の意図がよくわかりません^^; 具体的にどういう障害が出ているのでしょうか。 あなたが質問したいことは、何ですか? 【ダウンロードさせるにはどうしたらいいでしょうか?】 だけですと、わかりません。。。 ・ファイルをサーバ上に保存できないんですか? ・クライアントで保存できないんですか? ・クライアントでファイルのリンクをクリックすると、勝手に開いてしまうのですか? あなたの書いたソースを使えば、おそらくサーバ上に保存するところまではできると思いますが、、、 以上、補足要求でした。
補足
すみません。説明不足で申し訳ありません。以後気をつけます。 早速ですが、補足させて頂きます。行いたい事は、下記の通りです。 1.あるボタンをクリックすると、サーバ側のあるフォルダに、CSVファイルを作成します。(仮にこれをA.CSVとします。) 2.さらに、サーバ側で作成されたA.CSVファイルを、クライアント側にダウンロードという形で、CSVファイルを保存します。 1.については、おっしゃる通りサーバ上に保存は出来ていますが、2.においては、全く解らない状態で行き詰まっています。 実際のところ全く解っておらず、思考錯誤している状況にあります。 以上、宜しくお願い致します。
- anmochi
- ベストアンサー率65% (1332/2045)
「サーバのローカル上に保存された」と書かれてあるが、実際これはASP内で動的に作成して保存しているのでは? もし可能ならば、サーバのローカル上にいったん保存せずに、作成したCSVデータを直接クライアントに送りつけてはどうだろうか。いかに簡単なサンプルを示す。 ' クライアントに対するレスポンスをHTMLではなく汎用オクテットストリームとして返す Response.ContentType="application/octet-stream" ' ダウンロードさせるファイル名を指定 Response.AddHeader "Content-Disposition","attachment; filename=" & rizu_id2 & ".csv" ' CSVの内容は普通にResponse.Writeで。つまり、君が書いたサンプルと比べると、ファイルに対して書き込むか、HTTPレスポンスに対して書き込むかの違いとなる。ストリームの概念考えた人にはノーベル賞やね。 Response.Write (CSVの内容~~~~) ' 終了 Response.End もしそれでもいったんサーバに保存させたければ、書き込みを同時に行っても良いだろうし、CSVを作るスクリプト(君が作ったやつ)とそのCSVを読み込んでダウンロードさせるスクリプト(サンプルを参考にCSVを読み込んでオクテットストリームとして返してあげるのを作ってね)を用意すれば良いだろう。
補足
早速の御回答有難う御座いました。おっしゃる通り行ってみましたが、ダウンロードさせたCSVファイルを確認すると、リンクのようになってしまってカンマ区切りにならなくなってしまいました。 又、サーバとクライアント両方にCSVファイルが必要の為、動的に作成したCSVファイルをクライアントにダウンロードする必要があります。ご指摘のCSVを作ったスクリプトの後にそのCSVを読み込んでオクテットストリームとして返す方法がわかりません。 何卒、ご教授宜しくお願い致します。
お礼
どうも有難う御座いました。無事解決致しました。これからもっと勉強を行い邁進していきます。今後とも宜しくお願い致します。