上传文件到远程服务器,应该如何操作?

5

我正在为此苦恼。我的情况是需要将一个文件从我们的托管服务器(完全不同的服务器)上传到公司服务器机器上的一个文件夹(在C盘上)。我不知道该如何完成这个任务。你们中有人有关于如何做这件事的提示或代码吗?

谢谢大家!


你需要在目标服务器上运行某种文件传输服务,然后从客户端连接到它(文件正在从该客户端移动)。SFTP(安全Shell FTP)是一个不错的选择,尽管它不支持开箱即用。 - Matthew Flaschen
Dejan - 感谢您选择我的答案作为“答案”。 - Mark Brittingham
3个回答

3
我会在公司服务器上设置一个FTP服务器(例如IIS中的一个或第三方服务器)。如果安全性是个问题,你需要设置SFTP(安全FTP),而不是普通FTP,因为FTP不是本地安全传输协议。然后,在托管服务器上创建一个服务,以C#/.NET的FTP控件接收文件并将它们传送到公司服务器。老实说,这应该很简单。
更新:阅读你的问题,我强烈感觉你不会在公司服务器上运行网站。也就是说,你不需要在你的Web应用程序中上传文件控件(或者已经知道如何实现,因为控件就在Web页面工具箱中)。据我理解,你的问题是如何将文件从Web服务器传输到公司服务器。
更新2:添加了有关安全性的说明。请注意,如果服务器在同一子域中且不会路由到公司网络之外,或者数据不敏感,则此问题的影响较小。我起初没有想到这一点,因为我现在正在处理这样的项目,但我们的数据在任何情况下都不会受到影响。

你至少应该提到FTP是完全不安全的。 - Matthew Flaschen
虽然(FTP)是完全不安全的,但FTP可以采用多种形式,包括通常被称为FTP的SFTP。尽管我不建议在没有更多信息的情况下使用FTP,但FTP可能是处理此情况的完全足够的方法。 - GrayWizardx
你说得对,Mark。所以看起来ftp是可行的方法。我在谷歌上搜索了一些关于使用C#代码进行ftp传输的内容,但老实说,我没有找到任何对我有价值的东西,它们都太混乱了。你有这方面的例子吗? - Dejan.S
@GrayWizardx:请注意,SFTP(安全外壳文件传输协议)和FTP没有任何共同之处。然而,有一些方法可以保护原始的FTP协议,比如通过SSL进行隧道传输。 - Matthew Flaschen
我完全同意,但是在我处理的供应商/客户中,它们通常被称为相同的东西,因为SFTP或FTP over SSL很麻烦。 - GrayWizardx
谢谢。我在iis7上设置了ftp 7.5,并使用FtpWebRequest类进行了ftp传输。非常成功。接下来要研究的是sftp。 - Dejan.S

0

我认为他不是在寻找文件上传命令。我相信他是想将文件从Web服务器移动到公司服务器(该服务器没有运行Web应用程序)。 - Mark Brittingham
是的,我更多地处理服务器之间的交易。但还是谢谢你,Robert。 - Dejan.S

0

根据您提供的信息,我们无法完全了解您的整个托管情况,但我有一些建议可以帮助您朝着正确的方向开始:

  • 您的外部服务器是否由另一个公司或团体拥有,您无法修改它?如果不是,您可以考虑在同一台机器上托管进程,可以在进程中或作为机器上的单独服务。如果不能修改,则可以考虑在目标机器上托管服务,这样它就与需要显示的文件位于同一位置。
  • 文件是否需要与进程保持同步?即它们需要作为单个操作上传、移动和验证吗?如果不需要,则单独的进程可能是最好的选择。单独的进程将为您提供一些灵活性,但请记住,它将是一个单独的进程和一组单独的代码来管理和处理。
  • 正在上传的文件大小是多少?它们是否因上传而异?它们是纯文本文件还是二进制文件(zip、可执行文件等)?如果文件很小,您有更多的选择。如果它们足够小,甚至可以在线传输。

根据上述答案,以下一些可能适合您:

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

希望这能给你一些开始研究的起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接