- - PR -
[ASP.NET] Windows認証後のFile.Copyについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-21 11:52
お疲れさまです
ネットワークフォルダ(アクセス権限あり)のファイルをIISサーバー内にFile.Copyしたいのですが、 File.Copy実行時「ファイル〜が見つかりません」と失敗します web.configにて特定ユーザー(Admin)で偽装すればOKなのですが、これだとすべてのフォルダにアクセスできてしまい使用できません。 下記の通り試しましたが煮詰まってしまいましたので、お分かりの方ご教授の程お願いします。 *アクセス権のあるフォルダのみアクセス可とする* web.config 設定 <authentication mode="windows"/> <identity impersonate="true"/> IIS5 設定 統合windows認証(匿名アクセス無効) (Windowsへのログオンはドメインログオン) aspx実行時・・・ ファイル選択ダイアログ(inputbox.PostedFile)では、アクセス権のないフォルダははじかれる。OK アクセス権のあるフォルダ内のファイルは選択できる。OK File.Copyの結果、「ファイル〜が見つかりません」 NG 以上/前田 開発環境 ASP.Net(FW1.1)+Windows2000Pro+IIS5 ファイルSV Windows2000Server(DC) (リリース時はファイルSVのIIS5で実行予定です) | ||||
|
投稿日時: 2004-12-24 13:28
> aspx実行時・・・
> ファイル選択ダイアログ(inputbox.PostedFile)では、アクセス権のないフォルダははじかれる。OK クライアントに表示されているブラウザからアクセスしにいってるんですよね。 この場合、クライアントにログインしているユーザのアクセス権が使われるので うまくいって当然ですね。 > アクセス権のあるフォルダ内のファイルは選択できる。OK これも同上。 > File.Copyの結果、「ファイル〜が見つかりません」 NG ここはサーバ上で実行されている、ということになります。 結果的に、一番あやしいのはやはりアクセス権かなぁ、と思います。 サーバ上から指定しているファイルへのパス自体は問題ないんですよね? | ||||
|
投稿日時: 2004-12-24 14:06
いや、何もAdministratorにせんでも… 必要な権限だけを持ったユーザを作成して使うようにすれば良いのではないでしょうか? | ||||
|
投稿日時: 2004-12-28 10:07
なちゃさん、小野@さん レスありがとうございます。
その後ですが、実行クライアントでの現象で「ローカルディスクのファイル」もFile.Copyの結果、 「ファイル〜が見つかりません」になっていることが発覚しました。 web.configは前回書き込み時と同じでwindows認証+偽装のみ、IIS上の匿名ユーザーは無効となっています 開発PC(Win2k+IIS5)側での実行ではローカル、ネットワークともFileCopy OKです 気になるのは開発PCで実行時は認証ダイアログが表示されないのに、他クライアントで実行時は必ず認証ダイアログが表示されます。(ここで再度ドメインユーザー情報を登録してもFileCopyはローカル、ネットワーク共 NG です。。) サーバ上から指定しているファイルへのパスですが、クライアント上のネットワークフォルダ経由ですのでクライアントごとまちまちです(I:?〜、S:?〜 だったりします) と、こんな感じでまだ詰まっています。。 以上 | ||||
|
投稿日時: 2004-12-28 15:50
サーバにI:?〜やS:?〜といったドライブは存在してますか? きっと存在してませんよね。 で、サーバは存在してないIドライブ、Sドライブの中のフォルダを 見つけることができるんでしょうか? 絶対無理ですよね。 ということで、仕様に無理があると思いませんか? #思わないからこれでできる、と考えちゃったんだろな。 | ||||
|
投稿日時: 2005-01-05 10:17
あけましておめでとうございます。本年もよろしくお願いします
>サーバにI:?〜やS:?〜といったドライブは存在してますか? >きっと存在してませんよね。 はい。クライアントが割り付けたネットワークドライブ名なのでIISサーバーには存在しないドライブパス名です。 クライアント側から見たローカルディスクをASP.NETで処理させたい仕様です。 (クライアントー>サーバー上へFile.Copy) このような処理を行う他の方法ってあるんでしょうか? 前田 | ||||
|
投稿日時: 2005-01-05 12:21
クライアントがローカルファイルを指定して、そのファイルをサーバーにアップロードする、という要件でしょうか?
HTMLコントロールの「File Field」を貼り付けて、id(下記ではtxtFileName)とrunat="server"を指定し、次のようなコードを記述すればファイルをアップロードできます。 当然ですが、ASPのユーザーに書き込み先ディレクトリ(下記ではC:\PostedFiles)への権限設定が必要です。
PostedFile.FileNameにはクライアントが指定したフルパスが設定されるようですが、クライアント上のフルパスはサーバーでは無意味なので、ファイル名のみ抽出しています。 | ||||
|
投稿日時: 2005-01-05 15:27
kanaiさん、ありがとうございます
ご指摘の通り、HTMLコントロールの「File Field」にてクライアントからサーバーへファイルアップロードが行える事を確認しました。クライアントのネットワークフォルダパスも問題ありませんでした。 要件は「複数のローカルファイルをアップロードする」で、いままでリストボックス上のファイル名をループでFile.Copyする、と考えていました。ここで「File Field」にループでファイル名を代入しsaveas、とすれば?と思いましたが「File Field」= fileName とすると「プロパティは設定できない」となってしまいます。 複数ファイルを「File Field」でアップロードする場合、なにか良い方法があればご教授の程お願いします 以上/前田 |