FTP断点续传:大文件传输不重来的小秘密

你有没有过这种经历?深夜上传一个几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”的意思,自动启用断点续传。网络不稳定时也能安心挂机。

别再让一次掉线毁掉半小时的努力。打开断点续传,把时间花在真正重要的事上。