使用FTP"附加"命令

Fey*_*yaz 1 ftp error-handling append

我想以编程方式将文件上传到ftp服务器(C++).如果在上传文件时连接丢失,我不想从头开始上传文件,而只是上传我尚未发送的部分.

APPE命令是否符合我的要求?我应该准确使用哪些FTP命令列表?如何?

Cal*_*aNN 6

我正在搜索有关APPE FTP命令的详细信息,它实际上是什么,但大多数网站只是状态只附加.然后我尝试命令以确保它按预期运行.

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

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

答案: 如果最后一次传输失败,要执行文件的恢复,没有这样的命令,但我们需要使用一系列命令来实现它.

这里的关键点是,如果您正在使用APPE命令或使用命令REST,请将本地文件搜索到上次上载的字节.REST将在该特定字节开始位置开始传输.我最终建立连接后执行此解决方案:

使用APPE(我从FileZilla日志中得到了想法):

  1. 使用SIZE检查文件是否存在并将其用作恢复标记.
  2. 打开本地文件系统并在标记上搜索.
  3. 使用APPE上传,FTP服务器会自动附加.

使用STOR和REST(我从edtFTPnet获得了这个想法):

  1. 使用SIZE检查文件是否存在并将其用作恢复标记.
  2. 使用从SIZE获得的结果发送REST,告诉FTP服务器开始写入该位置.
  3. 打开本地文件系统并在标记上搜索.
  4. 使用STOR作为普通上传.

请注意,并非所有FTP服务器都支持这两种方式.我看到FileZilla这两种方式切换取决于服务器.我的观察表明,使用REST是标准方法.下载也可以使用REST在给定的字节位置开始下载.

请记住,使用ASCII传输类型的简历支持会产生意外的结果,因为Unix和Windows具有不同的换行字节数.

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


Mar*_*man 5

检查RFC,特别是APPEND命令:

此命令使server-DTP接受通过数据连接传输的数据,并将数据存储在服务器站点的文件中.如果路径名中指定的文件存在于服务器站点,则数据应附加到该文件; 否则,应在服务器站点创建路径名中指定的文件.

请注意,您不能再简单地APPEND同一文件.您应该发送剩余的字节.也就是说,当连接丢失时,继续在相同的位置.