【问题标题】:Upload images acces to path denied上传图片访问路径被拒绝
【发布时间】:2012-12-03 21:05:20
【问题描述】:

您好,我在 asp.net 中上传图片时似乎遇到了问题。当我尝试上传图片时出现此错误:

拒绝访问路径“D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\aleczandru”。

我已将应用程序池 Identoty 设置为 NETWORKSERVICE,并且还以完全权限将 NETWORK SERVICE 帐户添加到 Images 文件夹,但我仍然遇到同样的错误。

这是我的代码:

private void addImageToApp()
{
    string path = "~/Images/avatar/userAvatars/" + User.Identity.Name;

    createPath(path);
    if( Directory.Exists(HostingEnvironment.MapPath(path)))
    {
        //try {
              UploadImage.SaveAs(HostingEnvironment.MapPath(path));
          //    MultiViewIndex.ActiveViewIndex = 0;
        //}catch(Exception ex)
        //{
          //     AvatarDetails.Text = ex.Message;
        //}  
    }
}

private void createPath(string path)
{  
    string activeDir = HostingEnvironment.MapPath("~/Images/avatar/userAvatars");
    if( !Directory.Exists(Server.MapPath(path)) )
    {
        string newPath = Path.Combine(activeDir, User.Identity.Name);
        Directory.CreateDirectory(newPath);
    }
}

我还能做些什么来解决这个问题?

编辑

您好,目前我对以下用户拥有完全的权限控制:

  • 经过身份验证的用户
  • IUSR
  • 系统
  • 网络服务
  • IIS_WPG
  • 管理员
  • 用户

我是否需要为 IIS 设置任何配置才能使其正常工作?

编辑

在过去的几天里,为了完成这项工作,我一直在使用 SQL-SERVER,所以我可能错误地配置了一些我理解的网络服务存储在 SQL-SERVER master.db 数据库中的东西。我似乎是有两个网络服务登录可能是这个问题吗?我记得当我第一次检查它时我没有现在我有两个:

编辑

这是我添加到文件夹的权限打印:

编辑:完全错误

堆栈跟踪:

【问题讨论】:

  • 您能否提供更多详细信息:您是在开发网络服务器还是 IIS 上运行它。您使用的是什么版本的 .net / IIS?是创建了路径但没有上传文件还是没有创建路径?
  • 我正在使用 .NET 4 和 IIS 6.1。路径是使用用户的用户名创建的。这部分有效。无效的部分是当我尝试保存文件时,我得到访问被拒绝错误我将忽略整个错误和堆栈跟踪。如果我从 Visual Studio 运行它,而不仅仅是从 IIS 运行,也会出现该错误

标签: c# asp.net


【解决方案1】:

在方法CreatePath 中,您正在创建文件夹“D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\aleczandru”。

然后,您尝试使用文件名“D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\aleczandru”保存上传的图像。

您不能拥有同名的文件夹和文件。如果您尝试这样做,操作系统会告诉您访问被拒绝。

我想您想在文件夹 aleczandru 中创建一个文件名,或者您打算将文件另存为 aleczandru.png 或文件夹 userAvatars 中的其他内容。

假设您的UploadImageFileUpload 控件,您可以使用上传文件的原始文件名将文件保存到用户的文件夹中。

UploadImage.SaveAs(HostingEnvironment.MapPath(
    Path.Combine(path, UploadImage.FileName)));

【讨论】:

  • 你能给我举个例子来说明我应该怎么做吗?我有点困惑?
  • 查看更新的答案。如果仍然不清楚,您希望获得的完整路径和文件名是什么?
  • @Mert:我明白了。你确实做到了。但我必须说我一开始没明白你的意思。既然您发表了评论,我看到您的答案实际上是相同的,尽管更像是评论。 Nistor 应该决定他是否想将正确答案更改为您的答案(当然,看看他对赏金做了什么)。他甚至可以选择让一个答案正确答案并将赏金奖励给另一个答案。
【解决方案2】:

请确保您的路径中有完整的文件名和文件扩展名。

【讨论】:

  • 创建目录时会没有文件名?
  • 他在创建目录时没有出错。当您看到黄色屏幕时,他在另存为方法时遇到错误。并且路径没有文件名。
  • 对不起,我的错误,我以为是创建目录时出错,而不是上传文件。
【解决方案3】:

好的...我之前已经为一个项目执行过此操作,以实现 http 的 PUT 方法。我不记得很清楚了..但是一些提示...如果我在办公室,我可以正确地告诉您。这里有提示

  1. 您需要添加 IIS_IUSRS 才能访问 windows 中的文件夹。
  2. 转到 IIS 管理控制台,单击已部署的站点节点,并为进来的相同文件夹/网站请求设置权限……我不记得是哪个类别了……设置窗格将允许您添加/修改POST、GET 和其他动词的权限...当您编辑它时,您应该看到管理员、特定用户帐户、匿名等选项。

也许我明天会回信……具体怎么做:-)

【讨论】:

    【解决方案4】:

    尝试赋予名为 users 的组修改该目录的权限(在安全的情况下)

    【讨论】:

    • 确保该文件夹不是只读的或受源代码控制
    • 尝试更改内置用户的权限
    • 添加到该文件夹​​的所有帐户都可以完全控制该文件夹
    • 这个文件夹(D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\aleczandru)是否存在?还是只有文件夹 D:\Projects IDE\Visual Studio\MyWork\Websites\Forum\Images\avatar\userAvatars\ 存在?
    • 如果你阅读了我提供的代码,你会发现如果文件夹不存在,它就会被创建
    【解决方案5】:

    您需要找出运行asp.net 上传页面的用户。如果您没有更改它,并且没有在模拟下运行,它应该默认为本地计算机上的 ASPNET 用户。无论结果如何,都应授予该用户对该文件夹的读/写权限。

    【讨论】:

    • 我发现我必须启用对 IUSR 的访问(假设是 IIS)
    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多