为什么我仍然得到“访问路径'C:\ ... \ ...'被拒绝”即使授予该目录的IIS_IUSRS写权限?

时间:2011-03-13 20:27:58

标签: asp.net-mvc iis-7 permissions aspose

我在我的控制器上写了一个方法,自动为我的客户端生成一个powerpoint卡座,但一切正常......除了我关于将文件保存到磁盘的部分。

我对这个概念并不陌生;并且“认为”我需要做的就是授予IIS_IUSRS对目录的写权限以及对所有父目录的读权限。我正在使用IIS 7,之前我已经使用IIS 6授予NETWORK SERVICE相同的权限。

只是为了踢,我甚至给了每个人对目录的写权限,我仍然得到异常:System.UnauthorizedAccessException:拒绝访问路径'C:...... \ Content \ PPT'。 (为简单起见,我删除了一些路径。)

还有什么我可以忽略的吗?它所在的服务器是我设置的第一个,所以我可能忽略了一些东西?

这是我的控制器方法简化:

public ActionResult CreatePowerPoint()
    {
        string path = HttpContext.Server.MapPath("~/Content/PPT");

        Aspose.Slides.Presentation presentation = new Aspose.Slides.Presentation();
        CreatePresentation(presentation);

        presentation.Save(path, Aspose.Slides.Export.SaveFormat.Ppt);

        return View();
    }
}

presentation.Save()方法采用路径和保存格式......我不知道还有什么可以尝试...我的代码有问题吗?我是否错误地创建了路径?我也可以将Stream流传递给save方法,但我不确定这是否能解决问题。

4 个答案:

答案 0 :(得分:18)

我找到了解决方案 - 我正在使用IIS 7,并且我将应用程序池设置为错误的标识。在IIS 7中,我只是更改了我的应用程序运行的应用程序池的标识和繁荣,一切正常。我使用NETWORK SERVICE作为我的身份。

对于那些使用Aspose幻灯片的人,我还必须确保文件名在路径中。

答案 1 :(得分:3)

应用程序池标识必须设置为“网络服务”(作为可用于运行服务的有效用户的示例)。但您还必须在启用IIS管理员身份验证\匿名身份验证和匿名用户身份设置为“应用程序池标识”。如果没有这个,我仍然会在文件上传时获得拒绝访问权限。

答案 2 :(得分:3)

我遇到了这个问题,但实际上是因为这些文件在NTFS FS中被标记为只读。

在我的情况下,new FileStream(path, FileMode.Open)失败了,可以通过用File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)替换它来轻松纠正。

底线,即使文件可读,只需指定FileMode.Open似乎默认为FileAccess.ReadWrite

答案 3 :(得分:0)

我遇到了同样的问题,问题是我没有删除给定文件夹的属性上的只读复选框