【问题标题】:ASP.net Getting the error "Access to the path is denied." while trying to upload files to my Windows Server 2008 R2 Web serverASP.net 收到错误“访问路径被拒绝”。尝试将文件上传到我的 Windows Server 2008 R2 Web 服务器时
【发布时间】:2013-11-12 12:12:03
【问题描述】:

我有一个将文件上传到 Web 服务器上特定文件夹的 asp.net web 应用程序。本地一切正常,但是当我将应用程序部署到 Web 服务器时,我开始收到错误“访问路径“D:\Attachments\myfile.doc”被拒绝”。我向“IIS AppPool”用户提供了应用程序在文件夹的完全权限下运行。我什至给了“Everyone”完全权限,但出现了同样的错误。

我将该文件夹添加到防病毒软件的例外列表中,但结果相同。我开始怀疑 Windows Server 2008 R2 可能需要一个技巧才能让我的上传工作。非常感谢您的帮助。

谢谢

【问题讨论】:

    标签: c# asp.net .net asp.net-4.0 windows-server-2008-r2


    【解决方案1】:

    您的 asp.net 帐户 {MACHINE}\ASPNET 没有对该位置的写入权限。这就是它失败的原因。

    考虑将资源访问权限授予 ASP.NET 请求标识。

    右击下载文件夹Properties > Security Tab > Edit > Add > locations > choose your local machine > click OK > Type ASPNET below "Enter the object name to select" > Click Check Names 选中所需访问权限的复选框 (Full Control)。如果它对您不起作用,请使用 Network Service

    现在这应该显示您本地的{MACHINENAME}\ASPNET 帐户,然后您将写入权限设置为该帐户。

    否则,如果应用程序通过<identity impersonate="true"/> 进行模拟,则身份将是匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的请求用户。


    或者只是在 ASP.NET 中使用专用位置来存储文件,即App_Data。要创建它,请右键单击您的 ASP.NET 项目(在 Visual Studio 中)Add > Add ASP.NET Folder > App_Data。然后您就可以将数据保存到此位置:

    var path = Server.MapPath("~/App_Data/file.txt");
    System.IO.File.WriteAllText(path, "Hello World");
    

    【讨论】:

    • 谢谢 Damian,我昨天没有在服务器上尝试这个。我将在周日早上再次访问服务器,然后我会测试并回复你,如果它有效,再次感谢:)
    • 我在本地机器上试过了,但在本地机器上找不到帐户 ASPNET
    • 亲爱的 Damian,我在本地机器上找不到名为“ASPNet”的用户,也无法将位置设置为 AppData :(
    • 我刚刚在这上面花了几个小时,结果发现路径是错误的——完全相同的错误!
    • @IrishChieftain 同样的事情也吸引了我。
    【解决方案2】:

    问题可能是networkservice没有读取权限

    解决办法:

    右键单击您的上传文件夹 -> poperty 的 -> 安全性 -> 编辑 -> 添加 -> 输入 :NETWORK SERVICE -> 复选框完全控制允许 -> 按确定或应用

    【讨论】:

    • 如果无法获取 IIS_IUSRS 很有用
    【解决方案3】:

    右键单击服务器或本地计算机上的文件夹并授予完全权限

    IIS_IUSRS

    就是这样。

    【讨论】:

    • 检查网络服务权限增加后,这对我有用,谢谢。
    【解决方案4】:

    如果有人偶然发现这是谷歌的第一个结果,

    记得在 SaveAs 方法中也指定文件名。

    没用

    file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation));
    

    你需要这个:

    filename = Path.GetFileName(file_upload.PostedFile.FileName);
    file_upload.PostedFile.SaveAs(Server.MapPath(SaveLocation + "\\" + filename));
    

    我假设 SaveAs 方法会自动使用上传的文件名。 不断收到“拒绝访问”错误。不是很能描述实际问题

    【讨论】:

    • 对于这种行为根本没有帮助的错误消息。谢谢!
    【解决方案5】:

    您是否查看过高级安全设置?

    如下图所示,将文件夹的权限更改为 IIS_IUSRS

    【讨论】:

      【解决方案6】:

      我曾经遇到过这个问题,就我而言,解决方案是关闭任务管理器中使用/访问该文件的任何进程

      【讨论】:

        【解决方案7】:

        进入根目录

        右击,点击属性

        选择标签安全

        点击编辑

        点击添加

        键入“每个人”

        点击确定

        签出完全控制

        点击确定

        【讨论】:

        • 欢迎来到 SO。请阅读此how-to-answer 并按照那里的指南提供高质量的答案。
        • 我们也应该禁用防火墙,同时将机器名称密码提供给每个人。
        • 让每个人都完全控制永远不是答案。
        【解决方案8】:

        我知道这对游戏来说已经很晚了,但我想分享一下,以防它对某人有所帮助。

        您的确切情况可能不适用,但是我有类似的情况,设置 File 属性有所帮助。

        尝试将 File 属性设置为 Normal:

        var path = Server.MapPath("~/App_Data/file.txt");
        File.SetAttributes(path, FileAttributes.Normal);
        System.IO.File.WriteAllText(path, "Hello World");
        

        我希望这对某人有所帮助。

        【讨论】:

        • @SRoy - 您是在尝试写入 App_Data 还是其他路径?
        • 谢谢你,我已经拉头发 3 个小时了。
        【解决方案9】:

        验证你要写什么。我遇到了同样的问题,但我意识到我正在尝试编写一个长度为 0 的字节数组。

        这对我来说没有意义,但我得到:“访问路径”

        【讨论】:

          猜你喜欢
          • 2014-11-21
          • 2015-03-19
          • 1970-01-01
          • 2015-03-06
          • 1970-01-01
          • 1970-01-01
          • 2016-10-24
          • 1970-01-01
          • 2011-05-21
          相关资源
          最近更新 更多