6

我已经在我的控制器上编写了一个方法,它可以为我的客户端自动生成一个 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

4 回答 4

18

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

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

于 2011-03-14T18:09:23.987 回答
3

应用程序池标识必须设置为“网络服务”(作为可用于运行服务的有效用户的示例)。但是您还必须在 IIS Admin Authentication\Anonymous Authentication enabled 和 Anonymous User Identity 中设置为“应用程序池标识”。如果没有这个,我仍然会在文件上传时遇到访问被拒绝的异常。

于 2013-01-21T15:42:36.493 回答
3

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

在我的情况下,它是一个new FileStream(path, FileMode.Open)失败的,并且很容易通过用一个替换它来纠正File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)

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

于 2016-03-23T18:24:45.847 回答
0

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

于 2016-04-20T17:27:50.953 回答