2009-02-27 52 views
4

让我开始说,我不是windows文件权限的专家,所以也许这里有一些非常基本的东西,我在这里失踪。当使用UNC文件路径时Asp.net FileUploader不起作用

我有一个Asp.net FileUploader控件。我想要将文件上传到Asp.net应用程序所在的同一台机器上有一个文件夹。

我希望能够告诉FileUploader把文件

\\thisMachineName\UploadFolder\ 

但我总是得到一个异常,说明访问该路径被拒绝。

如果我改变目录是

c:\UploadFolder\ 

它工作正常。另外,我可以将上面的UNC放到Windows资源管理器中,它实际上映射到目录。

任何想法或想法?

- 更新注意:这是一个Windows 2000服务器框,并且该文件夹具有“Everyone”所有可能的允许权限。

回答

3

我总是看到人们做的一件事就是他们未能对共享设置权限。要设置共享文件夹,你必须做到以下几点:

1)确定下,你会被连接到共享
2)帐户授予在文件系统上该帐户的访问权限
3)授予此帐户对网络文件共享的访问权

在这种情况下,第1号通常意味着检查您的配置或仅使用进程资源管理器确定ASP.NET运行在哪个帐户下。谷歌有关如何做到这一点的大量信息。

第2号是显而易见的。您登录物理驱动器所在的机器,浏览到资源管理器中的文件夹,右键点击它并点击安全选项卡。我们已经做了这么多次。

第3号是人们陷入困境的地方。是的,工作人员帐户现在拥有本地文件系统的权限,但不能通过网络连接到本地文件系统。从安全选项卡跳回到网络共享选项卡并查找权限按钮。您将使用它来授予工作人员帐户连接到共享的权限。

我看到的第二个问题是,当人们试图将机器A上的访问权限授予仅存在于机器B上的帐户时,这通常不起作用。机器A和机器B都必须属于A和B都信任的用于认证用户的公共域。运行Windows的企业通常使用ActiveDomain来控制网络上的访问权限。

为了有ASP。机器B上的NET工作进程访问机器A上的共享,工作进程必须在网络上验证的帐户下运行,而不仅仅是本地机器。大多数情况下,您必须在网络上创建特定帐户,并将该帐户权限授予这两台计算机,然后使用该帐户为您的网站运行ASP.NET工作进程。

如果你摸不着头脑,那么你有一些学习要做。这东西不容易。我强烈建议阅读以下内容:

http://msdn.microsoft.com/en-us/library/ms978378.aspx

其相对清晰,包含了你需要知道的一切。

+0

非常感谢! 我不知道,当你使用UNC(即使在我的情况下,它指的是本地计算机),它通过这个网络共享安全的东西,除了文件夹的正常权限。 我给ASPNET用户读/写访问共享,现在都是肉汁。 – spilliton 2009-02-27 19:09:46

1

您可以将文件放在该目录中,但ASP.NET进程运行的用户呢?在Windows Server 2003上(大概是2008年,但我不确定),ASP.NET运行在网络服务帐户下,几乎没有任何权限,尤其是在整个网络中。您必须在ASP.NET应用程序上使用模拟或使用Everyone访问权限设置共享。对于这种情况,我通常只需与Everyone访问权限设置一个共享,并进行防火墙保护,以便只有Web服务器才能访问。

+0

感谢Chris的回应。我向我的帖子添加了一条更新注释,因为我忘记了包含这是一个2k服务器框,以及我在UploadFolder上的权限。 我只是试着给“网络服务”完整的权限,我仍然得到访问被拒绝的错误。 – spilliton 2009-02-27 17:09:17

0

除了威尔的回答。

我必须将权限授予:NETWORK帐户,而不是NETWORK SERVICE帐户。

在共享文件夹的安全选项卡中添加NETWORK作为新用户并授予所需的权限。