我想以编程方式将文件上传到ftp服务器(C ++)。如果在上传文件时连接丢失,我不想从头开始上传文件,而只是上传我尚未发送的部分。
APPE命令是否符合我的要求?我应该准确使用哪些FTP命令列表?怎么样?
答案 0 :(得分:6)
我正在搜索有关APPE FTP命令的详细信息,它实际上是什么,但大多数网站只是状态只是追加。然后我尝试命令以确保它按预期运行。
我设计了FTP自动发件人,用于将日志文件从机器发送到服务器进行报告。我只想发送日志文件的最后一行。
使用APPE命令时,它实际上附加整个文件内容并附加到服务器中的现有内容。这将导致行条目重复。
答案: 如果最后一次传输失败,要执行文件的恢复,没有这样的命令,但我们需要使用一系列命令来实现它。
如果您使用APPE命令或使用命令REST,则此处的关键点是将您的本地文件搜索到上次上传的字节。 REST将在该特定字节开始位置开始传输。我最终决定在建立连接后执行此解决方案:
使用APPE(我从FileZilla日志中得到了想法):
使用STOR和REST(我从edtFTPnet得到了这个想法):
请注意,并非所有FTP服务器都支持这两种方式。我看到FileZilla这两种方式切换取决于服务器。我的观察表明,使用REST是标准方法。下载也可以使用REST在给定的字节位置开始下载。
请记住,使用ASCII传输类型的简历支持会产生意外的结果,因为Unix和Windows有不同的换行字节数。
尝试操作FileZilla以查看日志中的行为。 您还可以查看这个有用的开源FTP for .NET库,了解它们的工作方式。 edtFTPnet
答案 1 :(得分:5)
检查RFC,特别是APPEND
命令:
此 命令导致server-DTP到 接受通过的传输数据 数据连接和存储数据 在服务器站点的文件中。如果 pathname中指定的文件存在 在服务器站点,然后是数据 应附在该文件上; 否则在。中指定的文件 路径名应在 服务器站点。
请注意,您不能再简单地APPEND同一个文件。您应该发送剩余的字节。也就是说,当连接丢失时,继续保持相同的位置。