码迷,mamicode.com
首页 > Web开发 > 详细

.NET Core 2.1 Web 上传文件 关于System.IO.DirectoryNotFoundException

时间:2019-12-02 16:47:48      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:忽略   visual   区别   项目   image   inf   otf   图片   time   

在ASP.NET Web开发练习中,想要完成上传文件的功能:

技术图片

 

代码为:

View:

1<form method="post"  asp-controller="Register" asp-action="SetIcon" enctype="multipart/form-data">
2    <input name="file" type="file"  accept="image/*"/>
3    <button type="submit">提交</button>
4</form>

Action:

[HttpPost]
public IActionResult SetIcon(IFormFile file)
{
  string path=Path.Combine(Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName, 
                DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString(),file.FileName);

  Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write);

  file.CopyTo(stream);

  Return Redirect("");
}

 

尝试过程中在创建Stream实例时抛出异常,System.IO.DirectoryNotFoundException:"" is denie;

2017VisualStudio,项目为.NET Core 2.1,MVC 

 

查了很多资料,做一个总结:

1、这个是解决了我的问题的:在文件夹的属性-安全中编辑,添加用户“Network Service”,并设置相应权限;期间尝试过添加“Everyone”,发现没用。

2、容易被忽略的问题:代码中FileStream在创建的时候,path应该是文件的路径,而不是目录;

3、权限管理的相关类和方法:

这一部分应该不是根源性的问题,只是因为感觉Core和Framework的这一块的区别有点大,整理一下

//FileIoPermission
FileIOPermission iOPermission = new FileIOPermission(PermissionState.Unrestricted); iOPermission.AddPathList(FileIOPermissionAccess.AllAccess, path);
//DirectorySecurity;SetAccessControl扩展方法
DirectoryInfo directoryInfo = new DirectoryInfo(path); DirectorySecurity directorySecurity = new DirectorySecurity(); directorySecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); directoryInfo.SetAccessControl(directorySecurity);

4、其他解决异常的方法:以管理员身份运行项目以及关于程序池的用户等。

 

.NET Core 2.1 Web 上传文件 关于System.IO.DirectoryNotFoundException

标签:忽略   visual   区别   项目   image   inf   otf   图片   time   

原文地址:https://www.cnblogs.com/nnnzx/p/11971203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!