- PR -

[ASP.NET] Windows認証後のFile.Copyについて

投稿者投稿内容
とせ
会議室デビュー日: 2004/07/15
投稿数: 14
投稿日時: 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で実行予定です)
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-12-24 13:28
> aspx実行時・・・
> ファイル選択ダイアログ(inputbox.PostedFile)では、アクセス権のないフォルダははじかれる。OK

クライアントに表示されているブラウザからアクセスしにいってるんですよね。
この場合、クライアントにログインしているユーザのアクセス権が使われるので
うまくいって当然ですね。

> アクセス権のあるフォルダ内のファイルは選択できる。OK

これも同上。

> File.Copyの結果、「ファイル〜が見つかりません」 NG

ここはサーバ上で実行されている、ということになります。
結果的に、一番あやしいのはやはりアクセス権かなぁ、と思います。
サーバ上から指定しているファイルへのパス自体は問題ないんですよね?


なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-12-24 14:06
引用:

とせさんの書き込み (2004-12-21 11:52) より:
web.configにて特定ユーザー(Admin)で偽装すればOKなのですが、これだとすべてのフォルダにアクセスできてしまい使用できません。


いや、何もAdministratorにせんでも…
必要な権限だけを持ったユーザを作成して使うようにすれば良いのではないでしょうか?
とせ
会議室デビュー日: 2004/07/15
投稿数: 14
投稿日時: 2004-12-28 10:07
なちゃさん、小野@さん レスありがとうございます。
その後ですが、実行クライアントでの現象で「ローカルディスクのファイル」もFile.Copyの結果、
「ファイル〜が見つかりません」になっていることが発覚しました。
web.configは前回書き込み時と同じでwindows認証+偽装のみ、IIS上の匿名ユーザーは無効となっています
開発PC(Win2k+IIS5)側での実行ではローカル、ネットワークともFileCopy OKです

気になるのは開発PCで実行時は認証ダイアログが表示されないのに、他クライアントで実行時は必ず認証ダイアログが表示されます。(ここで再度ドメインユーザー情報を登録してもFileCopyはローカル、ネットワーク共
NG です。。)

サーバ上から指定しているファイルへのパスですが、クライアント上のネットワークフォルダ経由ですのでクライアントごとまちまちです(I:?〜、S:?〜 だったりします)

と、こんな感じでまだ詰まっています。。

以上
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-12-28 15:50
引用:

とせさんの書き込み (2004-12-28 10:07) より:

サーバ上から指定しているファイルへのパスですが、クライアント上のネットワークフォルダ経由ですのでクライアントごとまちまちです(I:?〜、S:?〜 だったりします)



サーバにI:?〜やS:?〜といったドライブは存在してますか?
きっと存在してませんよね。
で、サーバは存在してないIドライブ、Sドライブの中のフォルダを
見つけることができるんでしょうか?
絶対無理ですよね。

ということで、仕様に無理があると思いませんか?

#思わないからこれでできる、と考えちゃったんだろな。

とせ
会議室デビュー日: 2004/07/15
投稿数: 14
投稿日時: 2005-01-05 10:17
あけましておめでとうございます。本年もよろしくお願いします

>サーバにI:?〜やS:?〜といったドライブは存在してますか?
>きっと存在してませんよね。

はい。クライアントが割り付けたネットワークドライブ名なのでIISサーバーには存在しないドライブパス名です。
クライアント側から見たローカルディスクをASP.NETで処理させたい仕様です。
(クライアントー>サーバー上へFile.Copy)
このような処理を行う他の方法ってあるんでしょうか?

前田


kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-01-05 12:21
クライアントがローカルファイルを指定して、そのファイルをサーバーにアップロードする、という要件でしょうか?

HTMLコントロールの「File Field」を貼り付けて、id(下記ではtxtFileName)とrunat="server"を指定し、次のようなコードを記述すればファイルをアップロードできます。

当然ですが、ASPのユーザーに書き込み先ディレクトリ(下記ではC:\PostedFiles)への権限設定が必要です。

コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim filename As String
        If txtFileName.PostedFile.FileName <> "" Then
            filename = "C:\PostedFiles\" & IO.Path.GetFileName(txtFileName.PostedFile.FileName)
            txtFileName.PostedFile.SaveAs(filename)
        End If
    End Sub



PostedFile.FileNameにはクライアントが指定したフルパスが設定されるようですが、クライアント上のフルパスはサーバーでは無意味なので、ファイル名のみ抽出しています。
とせ
会議室デビュー日: 2004/07/15
投稿数: 14
投稿日時: 2005-01-05 15:27
kanaiさん、ありがとうございます
ご指摘の通り、HTMLコントロールの「File Field」にてクライアントからサーバーへファイルアップロードが行える事を確認しました。クライアントのネットワークフォルダパスも問題ありませんでした。

要件は「複数のローカルファイルをアップロードする」で、いままでリストボックス上のファイル名をループでFile.Copyする、と考えていました。ここで「File Field」にループでファイル名を代入しsaveas、とすれば?と思いましたが「File Field」= fileName とすると「プロパティは設定できない」となってしまいます。

複数ファイルを「File Field」でアップロードする場合、なにか良い方法があればご教授の程お願いします

以上/前田

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