C# asp.net core中的文件被拒绝访问
C# asp.net core中的文件被拒绝访问,c#,iis,asp.net-core,C#,Iis,Asp.net Core,当我将我的项目发布到iis并在浏览器上上传图片时,此操作失败,并在logger sysytem 发生未经处理的异常:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwwroot\images\UserProfile\pic_50.jpg”。System.UnauthorizedAccessException:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwroot\images\
当我将我的项目发布到
iis
并在浏览器上上传图片时,此操作失败,并在logger sysytem
发生未经处理的异常:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwwroot\images\UserProfile\pic_50.jpg”。System.UnauthorizedAccessException:拒绝访问路径“C:\Inetpub\vhosts\qarbal.com\back.qarbal.com\wwroot\images\UserProfile\pic_50.jpg”。
位于System.IO.FileStream.OpenHandle(文件模式、文件共享、文件选项)
位于System.IO.FileStream..ctor(字符串路径、文件模式、文件访问访问、文件共享、Int32 bufferSize、文件选项)
动作控制器
[HttpPost("[action]")]
public async Task<IActionResult> EditPhoto()
{
var uploadsRootFolder = Path.Combine(_env.WebRootPath, "images\\UserProfile");
var files = Request.Form.Files;
foreach (var file in files)
{
if (file == null || file.Length == 0)
{
continue;
}
var filePath = Path.Combine(uploadsRootFolder, queryModel.Name + files[0].FileName);
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(fileStream).ConfigureAwait(false);
}
}
return Json("ok");
}
如何解决此异常?右键单击
wwwroot
文件夹->属性->安全选项卡->单击Edit
按钮->输入IIS-AppPool\DefaultAppPool
用户->单击检查名称
->确定->然后授予它写入权限
工作正常
string fileName = file_name+".pdf";
string files = System.IO.Path.Combine("pdf/") + fileName;
if (!System.IO.File.Exists(files))
{
return RedirectToAction("index", new { message = "File Not Found" });
}
else
{
byte[] fileBytes = System.IO.File.ReadAllBytes(files);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, files);
}
您的应用程序池似乎没有足够的权限。很可能应用程序池标识没有访问该路径的权限。尝试授予它访问
c:\inetpub
(及其所有子目录)的权限。如果应用程序池以模拟用户的身份运行,您应该选择一个不同于inetpub
的文件夹。如果不工作,这些更改需要重新启动服务器,或者?这对我有效,但用户名名为IIS IUSRS
,我在“添加用户”菜单的“高级”按钮下找到了它。
string fileName = file_name+".pdf";
string files = System.IO.Path.Combine("pdf/") + fileName;
if (!System.IO.File.Exists(files))
{
return RedirectToAction("index", new { message = "File Not Found" });
}
else
{
byte[] fileBytes = System.IO.File.ReadAllBytes(files);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, files);
}