上传图片访问路径被拒绝

时间:2012-12-03 21:05:21

标签: c# asp.net

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

  

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

我已将应用程序池设置为NETWORKSERVICE并且还将网络服务帐户添加到具有完全权限的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
  • SYSTEM
  • 网络服务
  • IIS_WPG
  • 管理员
  • 用户

我是否可以将任何配置设置为IIS才能使其正常工作?

修改

我最近几天搞乱了SQL-SERVER以便完成这项工作,所以我可能错过了一些形式,我理解NETWORK SERVICE存储在SQL-SERVER master.db数据库中。我好像是有两个网络服务登录可能这是问题吗?我记得当我第一次检查它时,我现在没有,我有两个:

enter image description here

修改

这是我添加到文件夹中的permisions打印:

enter image description here

编辑:完成错误

enter image description here

堆栈跟踪:

enter image description here

5 个答案:

答案 0 :(得分:5)

在方法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”保存上传的图像。

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

What happens if you try this in a command prompt

我想您要在文件夹aleczandru中创建文件名,或者您想将文件保存为aleczandru.png或文件夹userAvatars中的文件。

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

好的......之前我已经为一个项目实现了这个实现http的PUT方法。我不清楚地记得它......但有些暗示......如果我在办公室,我可以正确地告诉你。这是提示

  1. 您需要添加IIS_IUSRS才能访问Windows中的文件夹。
  2. 转到IIS管理控制台单击已部署的站点节点,并设置相同文件夹/网站请求的权限...我不记得它是哪个类别..设置窗格将允许您添加/修改POST,GET和其他动词的权限......当你编辑它时,你应该看到Administrator,特定用户帐户,匿名等选项。
  3. 可能是我明天会写回来......到底该怎么做: - )

答案 3 :(得分:0)

尝试为名为users的组授予修改此目录的权限(在安全性下)

答案 4 :(得分:0)

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

相关问题