【问题标题】:Access denied to path , when uploading image to folder in server将图像上传到服务器中的文件夹时拒绝访问路径
【发布时间】:2025-12-08 19:40:01
【问题描述】:

当您将文件上传到服务器中的指定文件夹时出现错误。在这里,我将在 storeimg 文件夹中上传 P6100083.jpg。当我要上传时,我收到以下错误:

访问路径'C:\inetpub\vhosts\bookmygroups.com\httpdocs\storeimg\P6100083.jpg' is denied.

谁能帮帮我...如何使用权限和使用...

我的代码在上传图片时

if (FileUpload1.HasFile)
{           
    float fileSize = FileUpload1.PostedFile.ContentLength;
    float floatConverttoKB = fileSize / 1024;
    float floatConverttoMB = floatConverttoKB / 1024;
    string DirName = "storeimg";
    string savepath = Server.MapPath(DirName + "/");
    DirectoryInfo dir = new DirectoryInfo(savepath);
    // string savepath = "C:\\Documents and Settings\\ssis3\\My Documents\\Visual Studio 2005\\WebSites\\finalbookgroups\\" + DirName + "\\";

    if (fileSize < 4194304)
    {
        string filename = Server.HtmlEncode(FileUpload1.FileName);
        string extension = System.IO.Path.GetExtension(filename).ToUpper();

        if (extension.Equals(".jpg") || extension.Equals(".JPG") || extension.Equals(".JPEG") || extension.Equals(".GIF"))
        {            
            savepath += filename;                       
            FileUpload1.SaveAs(savepath);
        }
    }
}

提前致谢

【问题讨论】:

  • 请使用 C# 方法 Path.Combine() 构建路径并避免前导或尾随 / 和 \ 的问题。

标签: c#


【解决方案1】:

我在文件系统上的上传或任何写入操作都无法在 IIS7 上运行。

仍然收到错误:访问路径被拒绝。

我的 AppPool 在网络服务下运行。我已经授予各种帐户完全控制权(网络服务、网络、IIS_IUSR、管理员、用户、每个人),多次重新启动网络服务,研究了所有 IIS7 设置,谷歌搜索了两个小时,但没有任何效果。

IIS7 和 WS2008 s-u-c-k-s。对不起这个词。有人可以帮忙吗?

我只是想补充一下:我注意到在上传的目标文件夹的属性中有一个名为“只读(仅适用于文件夹中的文件)”的复选框,并且它已被选中。它不能取消选中,取消选中并单击确定按钮后返回选中。是 IIS7 保护它吗?

编辑此消息以添加解决方案:我的管理员已在我们的服务器上关闭了愚蠢的 UAC“安全确认功能”,重新启动了机器,它现在可以工作了。不需要“网络服务”或任何其他 IIS 使用的帐户的“写入”访问权限。当使用集成身份验证访问 ASP.NET Web 应用程序中的文件系统并在其 web.confing 中将模拟设置为 true 时,文件系统似乎由经过身份验证的最终用户的帐户访问,而不是由网络服务帐户访问AppPool 在其下运行。 (很多人告诉您设置网络服务权限,但事实并非如此。)因此,您需要为您的特定文件夹上的最终用户(通常是域用户:“域\域用户”)设置“写入”权限。

哦,是的,上面提到的“只读(仅适用于文件夹中的文件)”复选框似乎没有任何效果。但是微软表示“某些程序可能在写入此类文件夹时遇到问题,您应该使用命令行语句“attrib -r -s”来摆脱只读属性”——但它不起作用。它将留在那里检查为灰色。但不要担心。微软每天都变得越来越傻。

【讨论】:

    【解决方案2】:

    死了,这是服务器问题。

    您需要验证您的应用程序池底层用户是否具有对该目录的写入权限。

    如果您使用 IIS7,您将拥有一项新功能,可帮助您向该用户提供自定义写入,而无需更改用户。

    看看这个链接: http://www.adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      这是服务器问题。确保您拥有写入文件的必要权限。

      顺便说一句,由于您在分机上调用ToUpper(),因此没有理由测试".jpg"

      【讨论】:

        【解决方案4】:

        如果您使用的是 Plesk Panel,请转到 Plesk Panel 的文件管理器。列出“httpdocs”中的文件和文件夹。每个文件和文件夹的最右侧都有一个锁定图标。单击“storeimg”文件夹更改权限。单击高级按钮。授予这些权限:

        • Plesk IIS WP 用户 (IWPD_214(your_login_name))
        • Plesk IIS WP 用户 (IWPD_214(your_login_name))

        然后点击确定。

        【讨论】:

          【解决方案5】:

          首先检查权限是否启用,如果没有,然后转到该文件夹​​,该文件夹必须用于包含文件,然后右键单击文件夹,然后将显示文件夹属性,然后单击安全,将显示多个数字用户必须被允许的用户然后单击允许所有权限将被激活。

          【讨论】:

            【解决方案6】:

            首先,确保您的代码在本地运行良好(我假设您已经完成了一些操作)。

            然后部署到您的 TEST 或 UAT 环境。如果您在那里遇到问题,那么这是一个配置问题。确保运行您网站的应用程序池的服务帐户有权访问该文件夹。

            请使用 C# 方法 Path.Combine() 构建路径并避免前导或尾随 / 和 \ 的问题。

            【讨论】: