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