在多台服务器上上传文件的方法?

时间:2015-03-11 11:23:34

标签: c# .net asp.net-mvc asp.net-mvc-4 file-upload

  Web.Config
  <add key="Location" value="C:/Upload" />

   //controller
   private readonly string _Location = ConfigurationManager.AppSettings["Location"];

   var fileName = Path.GetFileName(httpPostedFile.FileName);
   var path = Path.Combine(_Location, fileName);
   httpPostedFile.SaveAs(path);

此代码在本地工作正常。我意识到我们在生产环境中有一个负载平衡器。我在负载均衡器后面有2台服务器A,B。有没有办法在服务器A,B上上传文件?我尝试做一些研究,大多数开发人员建议将文件上传到其中一个服务器上,然后每隔30分钟或1小时克隆一次上传文件夹..但是应该有一种标准的方法来通过代码执行此操作...(我有服务器名称和IP&#39; s

Thnaks

2 个答案:

答案 0 :(得分:4)

您不应该尝试通过代码执行此操作。如果其中一台服务器出现故障会怎样?您需要检测到这一点,然后在文件重新启动时同步该文件。

有三种明智的选择:

  • 复制 - 假设您使用的是Windows,则可以设置Distributed File System并使用此句柄来获取服务器之间的文件。
  • 同步 - 定期在生产服务器之间同步文件。这将产生一个问题,即如果您在A上传文件,它将无法立即在B上使用。
  • 共享存储 - 文件保存到两台服务器均可访问的网络共享中。在负载平衡环境中,如果提供文件的服务器不可用,则可能会出现单点故障。

答案 1 :(得分:0)

开发人员是对的。您的应用程序不应该关心它运行的服务器数量和服务器数量。只需与您的系统管理员交谈并设置rsync或类似内容来同步目录,同时提高响应速度,因为您的应用程序只需保存一次。

如果您必须,那么它就像以下一样简单:

foreach (string path in destinationPaths)
{
   httpPostedFile.SaveAs(path);
}

SaveAs()并非保证是线程安全的,因此您无法对其进行并行处理。您可以复制流并将其并行写入,但同样,您也不希望代码对此负责。

相关问题