我正在尝试将图像上传到我托管的网站。它在我的本地计算机上运行良好,但在上传到托管网站时出现错误。它专为在 ASP.NET Core 6 上运行而构建。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(ProductVM objVM, IFormFile? file)
{
try
{
if (ModelState.IsValid)
{
string wwwRootPath = _hostnvironment.WebRootPath;
if (file != null)
{
string filename = Guid.NewGuid().ToString();
var uploads = Path.Combine(wwwRootPath, "Images", "Product");
var extension = Path.GetExtension(file.FileName);
var fullpath = Path.Combine(wwwRootPath, uploads, filename + extension);
using (var fileStreams = new FileStream(fullpath, FileMode.Create))
{
file.CopyTo(fileStreams);
}
objVM.ImageURL = @"/Images/Product/" + filename + extension;
}
var _product = (Product)objVM;
try
{
_db.Products?.Add(_product);
_db.SaveChanges();
TempData["success"] = "Product Created Successfully";
return RedirectToAction("Index");
}
catch { }
}
}
catch (Exception ex)
{
//Error = Access to the path //'E:\Inetpub\vhosts\mywebsite.in\httpdocs\wwwroot\Images\Product\8033d927135.png' is denied.
}
return View(objVM);
}
我搜索了更改文件夹权限的代码,但找不到有效的代码
根据错误消息,很明显您的应用程序没有足够的权限来访问存储文件的E路径。
要解决此问题,我建议您可以尝试以下步骤:
如果您直接在服务器内运行应用程序而不是使用 IIS。
请以管理员角色运行应用程序。
如果您将此应用程序托管在 IIS 内。
请按照此步骤将IIS应用程序池标识修改为localsystem,看看问题是否已解决。
如果修改应用程序池身份解决问题,这意味着身份池没有包含足够的权限,因为在产品环境中使用localsytstem不够安全,我建议您可以修改
E:\Inetpub\vhosts\mywebsite.in\httpdocs\wwwroot\
文件夹来设置足够的权限IIS 托管应用程序池的权限如下:
1.打开Windows资源管理器
2.选择文件或目录。
3.右键单击该文件并选择属性
4.选择安全选项卡
5.单击“编辑”按钮,然后单击“添加”按钮
6.单击位置按钮并确保选择您的计算机。
7.在“输入要选择的对象名称:”文本框中输入 IIS AppPool\yourapplicationpoolname。
8.单击“检查名称”按钮,然后单击“确定”。
9.“选择用户或组”对话框的屏幕截图。
通过执行此操作,您选择的文件或目录现在也将允许
yourapplicationpool
身份访问。