我开发了一个Web项目,其中一个主要功能是上传文件。
所有权限均基于Windows身份验证。当我第一次创建项目时,我没有意识到它将在负载平衡的服务器上。现在它处于负载平衡服务器的环境中,文件上传已经成为一个主要问题。
我原本以为我可以创建一个虚拟目录到网络共享,这将是上传文件夹,但该解决方案已经变成了权限噩梦。我无法在生产环境中进行任何成功的测试运行。
所以我现在在想,我的解决方案是在服务器上创建服务,检查上传目录并同步它们。我看到的另一个可能的解决方案是将文件存储在我过去遇到过一些问题的数据库中。
是否有人知道将文件上传到使用Windows权限进行身份验证的负载平衡服务器的直接解决方案?
感谢。
更新 - 因此我更改了应用程序池,以便在Windows权限中对共享和文件夹本身具有完全权限的域帐户运行。虚拟目录在IIS中具有完全权限,但我仍然遇到同样的问题。
需要做的事情之一就是创建目录的能力,我认为现在可能会让我感到沮丧。我只是使用System.IO.Directory.CreateDirectory
关于我可能缺少权限的其他任何想法?
答案 0 :(得分:6)
如果您真的想避免存储在数据库中,我认为您的下一个最佳选择是您已经谈过的虚拟目录解决方案,但我可以看到权限问题很容易失控,具体取决于您的设置
在我们的生产环境中,我们所有不同的网站都有自己的应用池。应用程序池本身每个都有自己的域帐户,这使得在文件系统和SQL服务器中管理权限变得更加容易。这些帐户中的每一个都是IIS WP域组的成员。在群集中的每个服务器上,域IIS WP是本地内置IIS_WPG组的成员。 IIS配置在群集中的每个服务器上都是相同的。这样做的重要作用是确保给定的Web应用程序始终以相同的标识运行,而不管集群中的哪个服务器被命中。
通过我所描述的设置,实现虚拟目录解决方案非常简单,尽管您仍然需要担心其他明显的问题,例如命名冲突等。如果您仍在使用默认的应用程序池标识设置,我认为实施我所描述的内容将有助于在处理群集配置时让您的生活更轻松。
This article lists some good advantages and disadvantages to storing in the file system:
<强>优点强>
其中一个 存储文件的主要好处 磁盘是很容易做到的。 只需在FileUpload上调用SaveAs即可 控制,你已经完成了。
另一个优点是文件上 磁盘易于备份;你只是复制 文件到另一个位置。这个 也使得增量更容易 备份;已经存在的文件 备份不需要复制 试。
<强>缺点强>
贮藏 你在文件系统中的文件有一个 也有一些缺点。大概 最棘手的问题是 松散耦合的文件性质 磁盘。他们没有强烈的关系 在数据库中有记录。所以, 当你删除一个产品时 数据库,你最终可能会得到一个 孤儿产品形象。没有 直接进行INNER JOIN之间的方式 产品表和您的图像 文件夹,以确定孤立的是什么 你留下的文件。这意味着一个 页面开发人员负责 编写删除文件的代码 从磁盘每当关联 数据库记录被删除。
另外,要将上传的文件存储在磁盘上, 您的Web服务器需要权限 写入文件系统。这很简单 当你经营自己的时候来 服务器,但可能会证明更多 在ISP场景中存在问题。
答案 1 :(得分:0)
您的解决方案应该可以正常运行:
答案 2 :(得分:0)
FYI,
此问题的解决方案是使用有权访问共享的用户帐户,文件夹权限和虚拟目录权限进行临时模拟。
当我最初尝试这个时,我的模拟代码中出现了一些错误,然后修复了输入错误的密码,所以我放弃了这种方法。我终于尝试了其他一切并回到了这一点 - 看起来它正在发挥作用。
因此,当将网络共享作为虚拟目录进行处理时,答案是假冒。
这是代码的链接,使一切成为现实: