你有没有遇到过这种情况:在公司赶着交项目文件,点完“上传”后进度条纹丝不动,页面上那个“上传中”的提示像定格了一样?刷新也没用,重启软件照样卡住。其实,“上传进度加载不出来”这问题挺常见,原因也不全是网络差,下面这些情况你可能正踩中其中一个。
浏览器缓存堵住了通道
很多人忽略了浏览器缓存的影响。尤其是用了好几天没关的 Chrome 或 Edge,缓存数据堆积多了,处理上传请求时可能直接卡死。试试换个隐私窗口打开上传页面,或者清一下缓存再试。如果这时候进度条动了,那八成就是缓存惹的祸。
文件太大,前端没给反馈
有些上传功能压根就没做进度监听,尤其是老系统或内部开发的小工具。你选了个 2GB 的视频文件,界面上显示“正在上传”,但其实是静默传输,根本不会更新百分比。这种不是出错,是设计缺陷。可以打开浏览器开发者工具,切换到 Network 标签页,看看是否有数据在持续发送。如果有,说明正在传,只是没显示进度而已。
代码里漏了事件监听
如果你自己搭过上传功能,可能知道关键是要监听 XMLHttpRequest.upload.onprogress 事件。如果前端代码里没写这个,用户自然看不到进度。比如下面这段才是正确的写法:
const xhr = new XMLHttpRequest();
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
const percent = (e.loaded / e.total) * 100;
console.log('上传进度:' + percent + '%');
// 更新页面上的进度条
document.getElementById('progress').style.width = percent + '%';
}
};
xhr.open('POST', '/upload', true);
xhr.send(formData);
要是少了 onprogress 这一段,页面上再怎么等也不会出进度条。
服务器限速或超时
有时候问题不在本地。公司内网上传文件,可能经过代理或防火墙,上传速度被限制到几十 KB/s,大文件看着就像卡住。另外,Nginx 或 Apache 如果设置了短超时时间,比如 30 秒,大文件还没传完连接就被断了,前端也收不到反馈,进度条就僵在那里。这时候得让运维查一下服务器配置。
手机上传更易出问题
用手机传文件更容易出现“进度不动”的假象。比如微信网页版上传照片,切到后台后浏览器可能暂停了 JS 执行,返回来发现进度停着,其实是任务被挂起了。建议上传期间别乱切应用,尤其安卓机,某些厂商系统会过度省电,直接冻结后台网页。
下次再遇到上传进度不动,先别急着重启电脑。看看是不是文件太大没提示、浏览器卡了、或者根本就在正常传,只是界面没刷新。对症下药,省时又省心。