ASP.NET Web開発の練習では、ファイルのアップロード機能を完了したいです:
コード:
見ます:
1 <フォームメソッド= " ポスト" ASP-コントローラ= " 登録" ASP-ACTION = " SetIcon "のenctype = " マルチパート/フォームデータ" > 2 <入力名= " ファイル"タイプ= " ファイル" 受け入れる= " 画像/ * " /> 3 <ボタン型= " 送信" >提交</ボタン> 4 </フォーム>
アクション:
[HttpPost] 公共IActionResult SetIcon(IFormFileファイル) { 文字列パス= Path.Combine(Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName、 DateTime.Now.Year.ToString()、DateTime.Now.Month.ToString()、file.FileName)。 ストリームstream = 新しいFileStreamを(パス、FileMode.Create、FileAccess.Write)。 file.CopyTo(ストリーム)。 リターンリダイレクト("");
}
あなたはストリームインスタンスを作成するときに、例外をスローするSystem.IO.DirectoryNotFoundExceptionをしようとするプロセスは:「」denieです。
2017VisualStudio、このプロジェクトは、.NETのコア2.1、MVCであります
要約を行う、多くの情報を確認します。
無用発見時に「みんな」を追加しようとしました。セキュリティの編集、ユーザー「ネットワークサービス」を追加し、適切な権限を設定 - フォルダのプロパティで:1、これは私の問題を解決します。
2、簡単に質問を見落とし:コードのFileStreamを作成したときに、パスがファイルではなくディレクトリへのパスでなければなりません。
3、権利管理関連のクラスとメソッド:
このセクションでは、それは少し大きいのコアとフレームワークの間の違いを感じているという理由だけで、きちんと問題の根本的な原因ではありません
// FileIoPermission
FileIOPermission iOPermissionは= 新しいFileIOPermission(PermissionState.Unrestrictedを)。 iOPermission.AddPathList(FileIOPermissionAccess.AllAccess、パス);
// DirectorySecurity; SetAccessControl扩展方法
DirectoryInfo directoryInfo = 新しいDirectoryInfo(パス); DirectorySecurity directorySecurity = 新しいDirectorySecurity(); directorySecurity.AddAccessRule(新 FileSystemAccessRule(" みんな" 、FileSystemRights.FullControl、AccessControlType.Allow)); directoryInfo.SetAccessControl(directorySecurity)。
プロジェクトやプールなどでユーザプログラムを実行するには、管理者:4、他の方法は、異常を解決するために。