0

我正在尝试在新创建的文件夹中读取刚刚上传到服务器的文件(文件夹名称是会话 ID)

异常详细信息:System.UnauthorizedAccessException:对路径“...\UploadFiles\jeiqw1qxya33e3r00idwlceo”的访问被拒绝。

我不确定要授予哪个用户访问权限,在网上查看它说要添加运行应用程序池的身份,对我来说,这对我来说是 ApplicationPoolIdentity ...但我找不到要添加的用户文件夹权限。所以我添加了“每个人”并给予完全控制......只是为了试验头脑,我仍然得到上面的错误。

这与我在这里的最后一个问题有关... 带有制表符分隔文本文件的 StreamReader

使用 ' File.ReadAllLines()' 方法,这是有异常的行。

4

4 回答 4

0

找出应用程序在哪个特定帐户下运行的另一种方法是在代码中:System.Security.Principal.WindowsIdentity.GetCurrent().Name

但是,如果您已授予该帐户或所有人完全控制权并且您仍然收到拒绝访问错误,那么新上传的文件是否可能被锁定?您是否将上传的文件保存到虚拟目录内的位置?有时,如果文件保存到可浏览的位置,IIS 会临时锁定文件。病毒扫描程序有时也会导致文件锁定。

于 2013-02-19T19:21:32.690 回答
0

授予对动态创建的文件夹的读取访问权限是不切实际的 - 正如您所说的文件夹名称是会话 ID。

但是,您可以像这样将文件流式传输回给用户。

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.Charset = "utf-8";
response.ContentType = "text/xls";
response.AddHeader("content-disposition", 
   string.Format("attachment; filename={0}", fileName));
response.BinaryWrite(File.ReadAllBytes(filePath));
response.End();
于 2013-02-19T16:33:31.610 回答
0

如果您运行的是 IIS 7.5 或更高版本,那么与您的应用程序池一起运行的用户通常是“IIS APPPool{POOL NAME}”,其中 {POOL NAME} 是池/站点的名称。

如果您使用具有应用程序池标识的 IIS 7,我认为它仍然是您的站点运行的“网络服务”。

顺便说一句,您可以直接看到 yoru apppool(w3wp.exe) 在任务管理器/进程资源管理器等工具中运行的用户。

于 2013-02-19T16:38:00.473 回答
0

我要感谢大家的回复。

今天早上我用新的眼光看代码时,我注意到我的代码中有一个错误......

我有...

var records = File.ReadAllLines(Server.MapPath("~/UploadFiles/") + Session.SessionID).ToList();

它指向文件夹,而不是目标文件。

我改成...

var records = File.ReadAllLines(Server.MapPath("~/UploadFiles/") + Session.SessionID + "/ediFile.txt").ToList();

这现在有效!难怪这让我感到困惑,因为权限设置毕竟是正确的!:)

于 2013-02-20T09:10:05.043 回答