web-dev-qa-db-ja.com

ASP.net「パスへのアクセスが拒否されました」というエラーが表示されます。 Windows Server 2008 R2 Webサーバーにファイルをアップロードしようとしているとき

Webサーバー上の特定のフォルダーにファイルをアップロードするasp.net Webアプリケーションがあります。ローカルですべてが正常に動作しますが、アプリケーションをWebサーバーにデプロイすると、「パス「D:\ Attachments\myfile.doc」へのアクセスが拒否されました」というエラーが表示され始めます。 「IIS AppPool」ユーザーに、アプリケーションがフォルダーに対する完全な権限で実行されていることを伝えました。 「全員」に完全なアクセス許可を与えましたが、同じエラーがありました。

アンチウイルスの例外リストにフォルダを追加しましたが、結果は同じです。 Windows Server 2008 R2では、アップロードを機能させるためにトリックが必要になるのではないかと疑い始めています。本当に助かります。

ありがとう

47
Hassan Mokdad

Asp.netアカウント{MACHINE}\ASPNETには、その場所への書き込みアクセス権がありません。それが失敗する理由です。

リソースへのアクセス権をASP.NET要求IDに付与することを検討してください。

ダウンロードフォルダーProperties > Security Tab > Edit > Add > locations > choose your local machine > click OK > Type ASPNET below "Enter the object name to select" > Click Check Namesを右クリックして、目的のアクセスのボックスをチェックします(Full Control)。うまくいかない場合は、Network Serviceで同じことを行います

これでローカル{MACHINENAME}\ASPNETアカウントが表示され、このアカウントに書き込み権限を設定します。

それ以外の場合、アプリケーションが<identity impersonate="true"/>を介して偽装している場合、IDは匿名ユーザー(通常はIUSR_MACHINENAME)または認証された要求ユーザーになります。


または、App_DataであるASP.NETにファイルを保存する専用の場所を使用します。 ASP.NETプロジェクト(Visual Studio)Add > Add ASP.NET Folder > App_Dataを右クリックして作成します。次に、この場所にデータを保存できます。

var path = Server.MapPath("~/App_Data/file.txt");
System.IO.File.WriteAllText(path, "Hello World");
46
Damian Drygiel

サーバーまたはローカルマシン上のフォルダーを右クリックして、次への完全な権限を付与します。

IIS_IUSRS

それでおしまい。

68
UMAR

問題は、ネットワークサービスに読み取り権限がないことです

敬礼:

アップロードフォルダを右クリック-> poperty's-> security-> Edit-> add-> type:NETWORK SERVICE->チェックボックスフルコントロールallow-> OKを押すか適用

11

Googleの最初の結果であるため、誰かがこれに遭遇した場合、

saveAsメソッドでもファイル名を指定することを忘れないでください。

効かない

file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation));

あなたにはこれが必要です:

filename = Path.GetFileName(file_upload.PostedFile.FileName);
file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation + "\\" + filename));

SaveAsメソッドは、アップロードされたファイル名を自動的に使用すると想定しました。 「アクセスが拒否されました」エラーを取得し続けました。実際の問題をあまり説明していない

1
Shaakir

私はこの問題に一度直面しましたが、私の場合、解決策はそのファイルを使用/アクセスするタスクマネージャーのプロセスを閉じるです。

1
user6243946

私はこれがゲームに遅れていることを知っていますが、誰かに役立つ場合に備えて共有したかったです。

あなたの正確な状況は当てはまらないかもしれませんが、私は同様の状況にあり、ファイル属性の設定が役に立ちました。

ファイル属性を標準に設定してみてください。

var path = Server.MapPath("~/App_Data/file.txt");
File.SetAttributes(path, FileAttributes.Normal);
System.IO.File.WriteAllText(path, "Hello World");

これが誰かの役に立つことを願っています。

0

セキュリティの詳細設定で確認しましたか?

以下のようなものは、フォルダの権限をIIS_IUSRSに変更します

enter image description here

0
Adhik