@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

サーバーで作成したCSVをクライアントにダウンロードしたい

1
投稿者投稿内容
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2005-04-28 12:48
ちょっと場違いかもしれませんが、よろしくおねがいします

VB.NET ASP で開発しています。

WEB画面上の「CSV」出力というボタンを押すと
サーバー側で、あるフォルダにCSVファイルを作成保存し、
クライアント側でそのファイルを「保存」ないし「開く」
という処理を作成しました。

開発マシンをサーバーとして、
CSVファイルをデスクトップに保存するところまではできましたが。

が、今度は別マシンからクライアントとしてCSV作成ボタンをおすと
サーバー側にファイルはできているのですが、
それを開こうとするところで
「アクセスが拒否されました」
と表示されてしまいます。

CSVを一時的に保存するフォルダに対しては
とりあえず
Everyoneのフルコントロール権限を与えてみたのですが、
やはり同じでした。

設定の仕方ご存知の方、よろしくおねがいします。
背古井
常連さん
会議室デビュー日: 2004/04/02
投稿数: 39
投稿日時: 2005-04-28 14:27
CSVを作成するフォルダをWeb共有にして、そこのサイトのファイルをURLにアクセスする形にすれば、開くことが出来ます。
そのままファイルを開くより、間にオープン用の画面を置いてその画面から呼び出すようにしたほうが複数で開けたりといろいろ便利です。

------ 以下オープン用ASPXソース

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ページを初期化するユーザー コードをここに挿入します。
Dim General As New Cls_General
Dim Dim_Str_JavaScript As String
Dim PrintFileName As String

PrintFileName = Trim(Session("PRT_FILE"))

'----- Javaスクリプト作成 -----
Dim_Str_JavaScript = ""
Dim_Str_JavaScript &= "<SCRIPT language='JavaScript'>"
Dim_Str_JavaScript &= "location.replace('*******.CSV');"
Dim_Str_JavaScript &= "</SCRIPT>"

'----- Javaスクリプト発行 -----
RegisterStartupScript("Startup", Dim_Str_JavaScript)
End Sub

************************ ソース終了
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-04-28 15:16
Response.WriteFileを使うってのはどうでしょう?
HTTPヘッダもいぢれますし

ちなみに、ダウンロード関連は、過去スレにたくさん情報があります。この掲示板の上の方にスレッドディレクトリってリンクがありますよね?そこでに Web Application をクリックすると、ダウンロードってカテゴリがあるはず。

>VB.NET ASP

ん?ASP?VB.NETてことはASP.NETですよね?(結構紛らわしい…)
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-04-28 15:27
引用:

WEB画面上の「CSV」出力というボタンを押すと
サーバー側で、あるフォルダにCSVファイルを作成保存し、



CSVを一旦ファイルに落とすのではなく、Responseストリームに直接吐くのがよろしいかと。

http://www.ailight.jp/ASPDownload.aspx

[ メッセージ編集済み 編集者: todo 編集日時 2005-04-28 15:28 ]
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2005-04-28 15:37
背古井 さま、
ぼのぼの さま、
todo さま。

貴重なお時間割いて回答いただきましてありがとうございます。

これから実装して確認してみます。

アリガトウゴザイマス!!

7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2005-05-02 11:06
先日、ご教授いただいた内容、および
http://www.ailight.jp/ASPDownload.aspx
を拝見いたしまして、実現することができました。

ただ、ひとつわからないことがあります。

上記ページの内容どおりに記載しましたが、
上記ページではPage_Loadにコードを記載していたのを
今回は、
サーバーコントロールにしたボタンのメソッド(MakCSV_Click)内に記載してみました。
1度目は正しく動作するのですが、
続けてもう一度ボタンを押すとエラーメッセージが表示されてしまいます。

【サーバー上で実行すると、】
デバッグ画面が開き
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.Form1;
}
else {
theform = document.forms["Form1"];★
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
が展開され、「未定義のエラーです」と表示されてしまいます。
★の箇所でとまってしまいます。

【クライアントから実行すると、】
「該当ページにアクセスできません」と表示されます。

ただし、クライアントの中でも「OS:XP Proffesional IE:6.0」のマシンだと
正常に何度でもCSV作成処理を実行できます。

結論からすると
ボタンを押したところに実行処理を書くのではなく
別ページへ遷移し、PageLoadで実行処理を書かないといけないものなのでしょうか?

たびたび恐れ入りますが、よろしくお願いいたします。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-02 16:51
 AI Lightさんとこの例だと、ページの戻り値(ちょっと言葉が変)として、ファイルを返していたと思います。

 ここ、注意してください。ブラウザがリクエストを出し、その結果としてHTMLを受け取りましたので、レンダリングしました。そこからもう一度リクエストを出したところ、今度はHTML以外のものが返ってきたので、ダウンロードしました。
 では、今表示しているものはなんでしょう?前回のリクエストに対する結果の残骸、ではないでしょうか。

 とはいえ、Opera, FireFox, IEのうち、IEだけなんですけどね、この挙動。
_________________
7年目
常連さん
会議室デビュー日: 2005/04/28
投稿数: 21
投稿日時: 2005-05-02 17:02
お返事ありがとうございます。

確かに!

IEしか試しておりませんが、一番重要であるIEだけの現象トハカナシイです。

しかし、どうしても、解せないのが、
クライアントがXPProでIEバージョン6.0のマシンだけ現象が起きないというのが、
どうも不思議です。

疑問を残したまま次へ進むのもよくないと思いますが、

過去のスレッドをもう一度見ると、
同じ現象の質問が見つかりました。

その中では、
CSV出力を別画面で行うようにし、
Window.Openでその画面を起動しておられたのですが、
どうしても、
@元画面を残すか、
AOpenされた画面が自動で閉じててほしかったので、


結局Aで実現しました。
location.hrefで、別スレッド同様に親からの指定をすれば
無事行うことができました。

みなみなさま、お時間いただきありがとうございました!

ちなみに、参考にした別スレです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6388&forum=7
1

スキルアップ/キャリアアップ(JOB@IT)