FTP协议中是否有类似于HTTP Range头的内容?

9
假设我想通过FTP只传输文件的一部分-使用标准的FTP协议是否可能? 在HTTP中,我可以在请求中使用范围头Range header来指定远程资源的数据范围。如果是1mb文件,我可以要求从600k到700k的字节。 FTP中是否有类似的东西?我正在阅读FTP RFC,没有看到任何东西,但想确保我没有漏掉任何东西。FTP中有一个重新启动命令-Restart command - 这样做可以吗?

附录
在获取Brian Bondy下面的答案之后,我编写了一个只读流类来包装FTP。它支持基于REST动词的FTP资源上的Seek()和Read()操作。
可以在http://cheeso.members.winisp.net/srcview.aspx?dir=streams&file=FtpReadStream.cs中找到它。

执行Seek()操作非常缓慢,因为设置数据套接字需要很长时间。最好的结果是将该流包装在BufferedStream中。


这项功能是建议使用的:https://tools.ietf.org/id/draft-bryan-ftp-range-00.txt,但显然从未被接受。更多信息在这里:https://daniel.haxx.se/blog/2010/12/20/byte-ranges-for-ftp/ 我猜这个用例并不常见。我想使用它。 - jmcarter9t
2个回答

9

可以使用REST命令。

REST设置后续文件传输应该开始的点。它通常用于重新启动中断的传输。该命令必须在PORTPASV之后,RETRSTOR之前。

来自FTP的RFC 959:

RESTART(REST)参数字段表示文件传输重新启动的服务器标记。此命令不会导致文件传输,但会跳过文件到指定的数据检查点。此命令应立即跟随适当的FTP服务命令,该命令将导致文件传输恢复。

阅读更多:   http://www.faqs.org/rfcs/rfc959.html#ixzz0jZp8azux


很好。这设置了范围的开始,也就是答案的前半部分。将范围的结束设置为传输是另一半。我认为在FTP中不存在这样的功能,所以...我想客户端只需要停止传输。也许发送一个中止命令。需要测试。 - Cheeso
@Cheeso:是的,这是正确的,一旦您拥有足够的数据,您只需发送ABOR或断开数据连接即可。 - Brian R. Bondy
尝试过后,似乎正常工作了。谢谢。 - Cheeso

1
你应该研究一下GridFTP是如何进行并行传输的。这是使用你想要的技术(并且实际上可能更好地借鉴代码,而不是自己从头开始实现)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接