用FileZilla、WinSCP或者系统自带的ftp命令传文件,结果窗口里光秃秃一片,就看到“正在连接”“正在传输”,但到底传了3%还是85%,一点数都没有——这种感觉谁懂?不是卡了,是压根没给你进度条。
先看是不是界面被你关了
FileZilla默认是显示传输队列和进度条的,但有人手滑点过“视图→传输队列→隐藏”,或者点了右下角那个小箭头把状态栏收起来了。试试按 Ctrl+Shift+Q 调出传输队列窗口,再检查右下角有没有“显示/隐藏状态栏”的按钮(图标像两道横线)。WinSCP同理,菜单栏点“查看→传输队列”,确保它打钩了。
命令行ftp真不显示进度,别硬扛
Windows自带的cmd里敲ftp命令,传个200MB的压缩包,全程黑屏不动,连个“.”都不打——这不是bug,是设计如此。它压根没进度反馈机制。想用命令行又想要进度,换工具:用 curl 或 wget 代替。
比如用curl上传:
curl -T "本地文件.zip" ftp://用户名:密码@ftp.example.com/远程目录/
它会在终端实时打印上传速度和已传大小,看着踏实多了。
防火墙或杀毒软件偷偷拦截了数据通道
FTP分主动模式(PORT)和被动模式(PASV),多数家用路由器和安全软件对主动模式特别不友好——它会让服务器反过来连你的电脑,容易被当成异常行为拦掉。一旦连接不稳定,进度条就卡住不动,甚至直接断连。
解决办法很简单:在FileZilla里点“编辑→设置→连接→FTP→被动模式”,勾选“强制使用被动模式”;WinSCP则在站点设置里把“传输模式”改成“被动”。改完重连,进度条通常立马回来。
服务器端限制也可能背锅
有些共享主机或老旧FTP服务(比如vsftpd没配好)会禁用LIST、SIZE等命令,而客户端正是靠这些命令来算剩余时间、总大小的。没有SIZE响应,FileZilla就只能显示“未知大小”,进度条自然消失。
可以手动测试下:连上后,在FileZilla底部状态栏点右键→“调试日志”,再拖一个文件上传。如果日志里反复出现 550 SIZE not allowed in ASCII mode 或直接没SIZE返回,基本就是服务器问题。这时换个二进制模式试试:右键站点→“编辑站点→传输设置→强制UTF-8”关掉,再勾选“以二进制方式传输”。
最后查查是不是用了奇怪的代理或网络环境
公司内网、学校WiFi、某些运营商光猫桥接不干净时,FTP的数据连接容易被NAT吞掉。表现就是:能登录、能列目录,但一传文件就卡在“正在等待服务器响应”。这时候进度条不是不显示,是根本没走到那步。
临时绕过方法:换手机热点试一次。如果热点下进度条正常,问题八成出在网络中间设备上,联系网管调下FTP ALG(应用层网关)开关就行。