Webサーバー上の特定のフォルダーにファイルをアップロードするasp.net Webアプリケーションがあります。ローカルですべてが正常に動作しますが、アプリケーションをWebサーバーにデプロイすると、「パス「D:\ Attachments\myfile.doc」へのアクセスが拒否されました」というエラーが表示され始めます。 「IIS AppPool」ユーザーに、アプリケーションがフォルダーに対する完全な権限で実行されていることを伝えました。 「全員」に完全なアクセス許可を与えましたが、同じエラーがありました。
アンチウイルスの例外リストにフォルダを追加しましたが、結果は同じです。 Windows Server 2008 R2では、アップロードを機能させるためにトリックが必要になるのではないかと疑い始めています。本当に助かります。
ありがとう
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");
サーバーまたはローカルマシン上のフォルダーを右クリックして、次への完全な権限を付与します。
IIS_IUSRS
それでおしまい。
問題は、ネットワークサービスに読み取り権限がないことです
敬礼:
アップロードフォルダを右クリック-> poperty's-> security-> Edit-> add-> type:NETWORK SERVICE->チェックボックスフルコントロールallow-> OKを押すか適用
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メソッドは、アップロードされたファイル名を自動的に使用すると想定しました。 「アクセスが拒否されました」エラーを取得し続けました。実際の問題をあまり説明していない
私はこの問題に一度直面しましたが、私の場合、解決策はそのファイルを使用/アクセスするタスクマネージャーのプロセスを閉じるです。
私はこれがゲームに遅れていることを知っていますが、誰かに役立つ場合に備えて共有したかったです。
あなたの正確な状況は当てはまらないかもしれませんが、私は同様の状況にあり、ファイル属性の設定が役に立ちました。
ファイル属性を標準に設定してみてください。
var path = Server.MapPath("~/App_Data/file.txt");
File.SetAttributes(path, FileAttributes.Normal);
System.IO.File.WriteAllText(path, "Hello World");
これが誰かの役に立つことを願っています。