你有没有过这种经历?深夜上传一个几GB的视频到服务器,眼看进度条快到头了,突然网络卡了一下,连接断了。刷新再传,一切从零开始——那种崩溃感,就像煮面时锅烧干了。
什么是FTP断点续传?
FTP协议本身支持一种叫“断点续传”的功能,专业术语叫 REST(Restart),允许你在传输中断后,从上次停止的位置继续传,而不是从头再来。这在上传日志、备份数据库或同步大型项目文件时特别实用。
比如你在公司打包了一个10GB的客户数据压缩包,通过FTP传到外地分公司。传到8GB时Wi-Fi抽风断了线。没有断点续传的话,只能重新传10GB;而启用了REST命令,系统会记住已传的8GB,恢复连接后直接从第8.01GB继续。
怎么用?客户端基本都支持
大多数现代FTP客户端如FileZilla、WinSCP、Cyberduck等,默认开启断点续传。你只需要确保设置里没关掉它。
以FileZilla为例,在“编辑”→“设置”→“传输”→“失败时重试”中,勾选“启用断点续传”,并设置重试次数。之后每次传输中断,软件会自动尝试用REST命令恢复。
服务器端也得配合
光客户端支持还不够,FTP服务器必须响应REST命令。常见服务如vsftpd、ProFTPD、Pure-FTPd 默认支持,但有些虚拟主机为了安全会禁用。如果你发现传到一半总得重来,可能就是服务器不认REST指令。
可以手动测试一下:传一个大文件,中途手动断开,再连上看看是否提示“正在恢复传输”或显示从某个字节继续。
代码层面咋回事?
底层通信时,客户端会在断线重连后发送类似这样的命令:
REST 8589934592
意思是“请从第8589934592字节开始续传”。服务器如果返回350表示接受,接着发STOR命令,数据流就从指定位置写入,避免重复。
注意:断点续传只适用于单个文件。如果是整个文件夹中断,一般只能重传未完成的那个文件,其他已完成的不会受影响。
另外,使用断点续传要求文件在服务器端未被修改或删除,否则偏移量对不上,会出错。
小技巧:搭配脚本更省心
如果你经常传固定任务,可以用lftp这类命令行工具写脚本:
lftp -c \"open ftp://user:pass@yourserver.com; cd /backup; put -c bigdata.tar.gz\"
其中的 -c 参数就是“continue”的意思,自动启用断点续传。网络不稳定时也能安心挂机。
别再让一次掉线毁掉半小时的努力。打开断点续传,把时间花在真正重要的事上。