2010-03-29 71 views
1

我想以编程方式将文件上载到ftp服务器(C++)。如果在上传文件时连接丢失,我不想从头开始上传文件,而只上传我没有发送的部分。使用FTP“附加”命令

APPE命令是否满足我的要求?我应该使用什么FTP命令列表?如何?

回答

5

检查RFC并且具体地APPEND命令:

这 命令使服务器DTP到 接受经由 数据连接传送的数据,并 存储数据在一个文件在服务器现场。如果在服务器站点上的路径名中指定的文件 存在 ,则应将数据 附加到该文件; 否则应在 服务器站点创建 路径名中指定的文件。

请注意,您不能简单地再次添加同一个文件。您应该发送剩余的字节。也就是说,当连接丢失时继续保持相同的位置。

5

我在网上搜索有关APPE FTP命令的详细信息,实际上它做了什么,但大多数站点只是状态追加。然后我尝试一下命令以确保它的行为如预期。

我设计FTP自动发件人,用于从机器发送日志文件到服务器进行报告。我只想发送日志文件的最后一行。

当使用APPE命令时,它实际上附加了整个文件内容并追加到服务器中的现有文件中。这将导致行条目重复。

答案: 待办事项文件的恢复,如果持续传输失败,对于没有这样的命令,但我们需要使用命令序列来实现它。

这里的关键是如果您使用APPE命令或使用命令REST,请将您的本地文件查找到最后上传的字节。 REST将开始在该特定字节开始位置传输。我最终了这个解决方案来执行连接建立后:

使用APPE(我从FileZilla中日志的想法):

  • 使用SIZE来检查文件中存在和用它作为恢复标记。
  • 打开本地文件系统并在标记上查找。
  • 使用APPE上传,FTP服务器会自动附加。
  • 使用STOR与REST(我从edtFTPnet的想法):

  • 使用SIZE来检查文件中存在,并使用它作为恢复标记。
  • 发送REST与从SIZE得到的结果告诉FTP服务器开始在该位置上写入。
  • 打开本地文件系统并在标记上查找。
  • 使用STOR作为正常上传。
  • 请注意并不是所有的FTP服务器都支持这种方式。我看到FileZilla切换这两种方式取决于服务器。我的观察表明使用REST是标准方法。下载也可以使用REST在给定的字节位置开始下载。

    请记住,由于Unix和Windows具有不同的换行符字节数,因此使用ASCII传输类型的恢复支持将产生意外的结果。

    尝试操作FileZilla以查看日志中的行为。 您也可以查看这个有用的.NET库的开源FTP,了解它们的工作方式。 edtFTPnet