将文件上传到远程服务器,我该怎么办?

时间:2010-03-01 02:24:59

标签: c# asp.net ftp file-upload

我对此感到头疼。我的情况是我需要从我们的托管服务器(完全不同的服务器)上传文件到公司服务器机器(到c :)上的文件夹。我不知道该怎么做。你们中的任何人都有关于如何完成的提示或代码。

谢谢大家

3 个答案:

答案 0 :(得分:3)

我会在公司服务器上设置一个FTP服务器(如IIS或第三方服务器中的那个)。如果安全性是一个问题,那么您将需要设置SFTP(安全FTP)而不是vanilla FTP,因为FTP不是本机安全的传输协议。然后在主机服务器上创建一个服务,以便在文件进入时将其提取并使用C#/ .NET的FTP控件将它们发送到公司服务器。老实说,它应该非常简单。

更新:阅读您的问题,我的印象是您不会在公司服务器上运行网站。也就是说,你需要在你的网络应用程序中使用文件上传控件(或者已经知道如何在网页工具箱中控件正确的情况下实现一个)。根据我的理解,您的问题是如何从Web服务器获取文件到公司服务器。

更新2:添加了有关安全性的说明。请注意,如果服务器位于同一子域中且不会在公司网络外部路由和/或数据不敏感,则不必担心这种情况。我起初并没有想到这一点,因为我现在正在开展这样的项目,但我们的数据并不敏感。

答案 1 :(得分:0)

Darren Johnstone的文件上传控件是您可以在任何地方找到的最佳解决方案。它能够处理大型文件而不会影响ASP.NET服务器内存,并且可以显示文件上载进度而无需Flash或Silverlight依赖。

http://darrenjohnstone.net/2008/07/15/aspnet-file-upload-module-version-2-beta-1/

答案 2 :(得分:0)

没有足够的信息来告诉您整个托管方案,但我有一些建议可能会让您开始朝着正确的方向前进:

  • 您的外部服务器是否由其他公司或组拥有而您无法修改它?如果不是,您可以考虑在同一台机器上托管该流程,无论是在流程中还是在机器上作为单独的服务。如果无法进行修改,您可以考虑在目标计算机上托管服务,这样就可以将文件放在与文件需要显示的位置相同的位置。
  • 文件是否需要与流程保持同步?即他们是否需要作为单一操作上传,移动和验证?如果没有,那么单独的过程可能是最好的方法。单独的流程将为您提供一些灵活性,但请记住,它将是一个单独的流程和一组单独的代码来管理和使用
  • 正在上传的文件有多大?它们是否因上传而异?是普通文件,二进制文件(拉链,可执行文件等)?如果文件很小,那么您拥有的选项比它们很大时要多。如果它们足够小,你甚至可以在线传递它们。

根据上述答案,其中一些可能适合您:

  • 使用MSMQ。这适用于大约3MB以下的简单消息,没有太多麻烦。它非常适合可以直接使用的消息(例如XML)。
  • 使用直接HTTP(s)中继。在主机上打开到目标计算机的HTTP(s)连接并传输文件。同样,这对于较小的文件更有效(即只有几KB,因为它将在线完成)
  • 如果您有权访问主机,请在机器上部署单独的进程,以构建或收集文件,并使用任何列出的方法将它们发送到目标计算机。
  • 您可以在主机上(如果您有权访问)或目标计算机上使用SCP,FTP(任何形式的SFTP等)来托管传入文件,并使用批处理来移动文件。这将有很多问题要解决,例如文件大小,保持提交同步和时间。根据具体情况,我认为这是最后的手段。
  • 再次根据邮件大小,您还可以使用一个抽象层(如DB)充当两台计算机之间的中间层。只要两台机器可以看到DB(或其他存储位置)并且两者都对其起作用,这将起作用。 SQL Server Service Broker可用于此目的(大多数其他数据库产品提供类似产品)。
  • 您可以查看其他产品,例如WSO2 ESBNServiceBus,以便在两个应用之间进行消息传递,并以内联方式进行。

希望这会给你一些起点来研究。