如何在 ASP.NET Core 6 及以上版本中将图像文件上传到 wwwroot 文件夹

问题描述 投票:0回答:1

我正在尝试将图像上传到我托管的网站。它在我的本地计算机上运行良好,但在上传到托管网站时出现错误。它专为在 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);
}

我搜索了更改文件夹权限的代码,但找不到有效的代码

asp.net-core file-upload
1个回答
0
投票

根据错误消息,很明显您的应用程序没有足够的权限来访问存储文件的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。

enter image description here

8.单击“检查名称”按钮,然后单击“确定”。

9.“选择用户或组”对话框的屏幕截图。

通过执行此操作,您选择的文件或目录现在也将允许

yourapplicationpool
身份访问。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.