ARTICLE · 1343907
上传一个 Excel,拆成 N 张表:怎么让进度
上传一个 Excel,拆成 N 张表:怎么让进度
上传一个 Excel,拆成 N 张表:怎么让进度
一个后台任务跑几分钟,进度条到底该听谁的?我踩了一圈坑才明白:前端只管画,真相得服务端给。
以前写这种需求,业务代码半天写完。麻烦全在用户等的那几分钟里——按钮没锁住,重复上传互相覆盖;全程就一句"处理中",最耗时的前置阶段根本没提示;切个标签页、刷新一下,进度和结果全没了。
这三个 UI bug,其实是同一个病:任务状态跟着请求走,没独立出来。
解法是把接单和干活拆开。上传接口只存文件、生成 task_id、起个独立进程,立刻返回 202。真正干活放进独立进程,进度写到每个任务一份的状态文件里,前端拿着 task_id 轮询就行。
还有个大坑:完成不能靠 done >= total 猜。契约里必须有显式的终态——success、error、interrupted。只有进了终态,才准解锁上传区、出下载按钮。phase 和 done/total 也得拆开,phase 是一句人话,任何时候都得有值。这样哪怕总数还不知道,也能告诉用户"正在解析文件"。
这套方案实测上传接口 6.3 毫秒就返回了,旧客户端重传直接被 409 挡掉。热重载一次,任务照样跑到成功。
说白了,进度条不是画出来的,是约出来的。
原文上传一个 Excel,拆成 N 张表:怎么让进度条不骗人
上海,3小时前,















































































