使用FTP“附加”命令

时间:2010-03-29 08:25:50

标签: error-handling ftp append

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

  1. 使用SIZE检查文件是否存在并将其用作简历标记。
  2. 打开本地文件系统并在标记上搜索。
  3. 使用APPE上传,FTP服务器会自动附加。
  4. 使用STOR和REST(我从edtFTPnet得到了这个想法):

    1. 使用SIZE检查文件是否存在并将其用作简历标记。
    2. 使用从SIZE获得的结果发送REST,告诉FTP服务器开始写位置。
    3. 打开本地文件系统并在标记上搜索。
    4. 将STOR用作普通上传。
    5. 请注意,并非所有FTP服务器都支持这两种方式。我看到FileZilla这两种方式切换取决于服务器。我的观察表明,使用REST是标准方法。下载也可以使用REST在给定的字节位置开始下载。

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

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

答案 1 :(得分:5)

检查RFC,特别是APPEND命令:

  

此   命令导致server-DTP到   接受通过的传输数据   数据连接和存储数据   在服务器站点的文件中。如果   pathname中指定的文件存在   在服务器站点,然后是数据   应附在该文件上;   否则在。中指定的文件   路径名应在   服务器站点。

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