我在我的控制器上写了一个方法,自动为我的客户端生成一个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方法,但我不确定这是否能解决问题。
答案 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)
我遇到了同样的问题,问题是我没有删除给定文件夹的属性上的只读复选框。