- - PR -
【ASP.NET】リストボックスによるアップロードについて
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-26 21:40
みなさん、お騒がせしております(^_^;)
aspx ファイルには、 <INPUT language="vb" id="filGet1" type="file" name="filGet" runat="server"> があり、クライアント側のフルパス(C:\\\\hoge\\\\hogehoge.csv)を取得し、画面にある「追加」ボタンを押すと、リストボックスにファイルのフルパスを追加する仕組みになっています。 (リストボックスには、ファイルのフルパスが追加されます) <イメージ> C:\hoge\hogehoge.csv C:\hoge\hogehoge2.csv C:\hoge\hogehoge3.csv <追加ボタン押下時 処理> lstFile.Items.Add(filGet1.PostedFile.FileName) 配列.Add(filGet1.PostedFile.FileName) で、画面の「アップロード」ボタンを押すと、問題の処理を行ないます。
配列は、Session変数に入れて持ち回っており(理由は不明)、どうせフルパスを取得するならリストボックスから直接取得すればいいじゃん、と思った次第です。 分かっていただけましたでしょうか? | ||||||||||||||||||||
|
投稿日時: 2006-05-26 21:59
なるほど。それを先に言わないと。。皆さんも私も混乱してしまいましたよ。
最終的な目的はファイル保存なんですよね? 「アップロード」押下時、ファイルの内容自体はセッションにあるんだから、 クライアントでのパスがわかってもあまり意味がありません。 よって、このFor Eachの部分は、現状でそんなに問題ないと思いますよ。 (配列の要素をHtmlInputFileにするかはおいといて) (ボタン押下時、確実にセッションが保持されているかもおいといて) 処理的にはリストボックスの方が不要で、ユーザーに見せるためだけに使ってる ってことですよね?「アップロード」と言いながら、実はファイルはもうサーバーに あって、実際は「保存してくれ」ボタンてことですよね。 # 私だったら<input type="file" />を沢山用意しますけどねー。 [ メッセージ編集済み 編集者: べる 編集日時 2006-05-26 22:11 ] | ||||||||||||||||||||
|
投稿日時: 2006-05-26 22:14
現在している処理の最終的な目的は、クライアントから取得したファイルのデータをDBに登録することです<既に実現済み>。 しかし、私が今回目的としているのは、Session変数を使わず、リストボックスの値を利用したい、ということです。
今回の目的は、配列(セッション変数)を使わず、リストボックスから直接ファイル名を取得することです。
いいえ、違います(違うと思います<ちょっと弱気w>)。 「追加」ボタンは、単にリストボックスにファイル名を追加するだけで、サーバへのアップロードは行なっていません。 現状では、「アップロード」ボタンが押されたタイミングで、セッション変数の配列を利用してサーバへ一括アップロードしています。 SaveAs のタイミングで、サーバへのアップロードが行なわれると理解していますが、間違っているのでしょうか? | ||||||||||||||||||||
|
投稿日時: 2006-05-26 22:24
リストボックスの値を配列に格納して、それを・・・ということだったので、最初にリストボックスに格納する時点で・・・と考えたわけです(^▽^;) | ||||||||||||||||||||
|
投稿日時: 2006-05-27 00:55
ファイルがサーバーに転送されることはないと思います。
でも良く見たら、確かに「配列」にはstringしかAddしていませんね。 ↓こうじゃないですか??(じゃないとFor Eachのとき型が合わないと思います。。) 配列.Add(filGet1);
サーバー側のコードによって能動的にクライアントに何かをさせること(この場合 アップロード)は普通できません。 IeHttpHeadersかなんかで通信の内容を見てみるといいかもしれません。 | ||||||||||||||||||||
|
投稿日時: 2006-05-27 01:29
ちょっと確認ですが、ほんとにこの通りのコードで動いてるんですか? どう見てもっていうか全く動くとは思えないんですが… | ||||||||||||||||||||
|
投稿日時: 2006-05-27 02:02
ひろれいさん、こんばんは。
「追加」ボタンのクリックイベント・ハンドラって、どこで動作してます? あれはクライアントサイドの VbScript ではなくて、サーバサイドの vb.net のコードですよね? ってことは、「追加」ボタンをクリックする事によってポストバックが発生しているわけです。 で、その時、<input type="file" />に値がセットされている(ファイルへのパスが表示されている)のであれば、間違いなくアップロードは行われています。 何と言っても、PostedFile (ポストされたファイル)の FileName が取得できているのがその証拠です。 ですから、以下のべるさんの発言通りの処理が行われているものと思われます。
恐らく、最終的にリストの内容を確認して、確定するまで保留しておく必要があって、このような処理になっているのでしょうね。 | ||||||||||||||||||||
|
投稿日時: 2006-05-29 10:21
みなさん、おはようございます。
色々と検証しており、お返事が遅れました。申し訳ございません。 皆様のおかげで、やっと中身が見えてきました(^_^;) べるさんのお考えの通り、セッション変数にファイルオブジェクトを入れていました。
確かに、filGet1 を配列にセットしておりました。申し訳ございません。 要は、べるさんのお考えの通り、リストボックスはユーザへ見せるための表示だけに過ぎず、内部的にはセッション変数に filGet1 を詰め込み、それを利用しているみたいですね。これだと、私が考えていたリストボックスの利用は出来ませんね・・・ なちゃさんに「本当に動くの?」と言われたことで、再確認して気付きましたm(_ _)m
こちらにつきましては、やはり、「アップロード」ボタンが押された SaveAs時にサーバ側へアップロードされます。クイックウォッチで確認したので間違いありません。 べるさんのお考えの通り、私も
という点が気になっており、セッション変数の利用は止めたいと考え、今回の質問の通り、何か他の手(私はリストボックスが使えないかと考えたわけですが)はないかと思った次第です。 やはり、変えるなら、べるさんのおっしゃる通り、画面に複数セットしておくしか無いのでしょうか・・・ |