大文件转换一直显示处理中:怎样设计可靠的异步任务
大文件转换持续显示“处理中”,首先要让任务可查询。客户端应拿到稳定任务 ID、状态入口和明确的完成条件,而不是保持一个长连接直到超时,再猜测文件有没有生成。
接受请求不是转换完成
微软介绍的异步请求应答模式,通常先校验请求,接受后返回状态地址,让客户端按约定查询进度。HTTP 的接受状态表示请求已接受处理,并不保证最终成功。接口若返回任务已创建,前端不能立即把它当成可下载文件展示。
以两百页合同转 PDF 为例,提交成功后的正确成果是一个转换任务。任务进入队列、开始渲染、保存文件和完成检查,是后续不同阶段。即使进度已经走到末尾,存储失败也可能让最终文件不可用,因此完成状态需要与产物保存相联系。
任务状态要能解释长时间等待
| 状态 | 应返回的线索 |
|---|---|
| 排队 | 任务已接受,尚未开始 |
| 处理 | 当前阶段和最近更新时间 |
| 成功 | 产物 ID、文件信息和可用入口 |
| 失败 | 失败阶段及可执行的恢复方式 |
| 取消 | 停止结果和是否已有部分产物 |
进度无法可靠估算时,可以显示阶段和更新时间,不必编造不断增长的百分比。页面也应区分“任务没有新进度”和“客户端暂时查询不到任务”。网络断开不是转换失败,任务进程失联也不能永远维持看似健康的处理中状态。
轮询应受服务端节奏约束
如果接口提供建议间隔,客户端按其执行;没有建议时,采用适度退避与查询上限。刷新页面后继续查询原任务,避免每次打开界面都重新发起转换。用户明确更换源文件或导出规格时,再创建新的任务身份。
需要单独定义文件保留期限与任务记录保留期限。任务仍可查,但下载地址已经失效时,界面应提供重新获取入口或说明需要重新导出。不能因为旧地址打不开,就把过去已经成功的转换历史修改成从未完成。
最终验收要落在实际文件
任务成功后检查文件可读取、类型符合预期,并抽查关键页面或对象。对于合同,至少核对首页标题、页码连续性、签署页和附表;对于报表,还要核对数值与源版本。转换服务返回成功,只证明它的处理结束,不自动证明业务内容正确。
异常演练应覆盖浏览器关闭、客户端重启、服务端排队、任务成功但响应丢失、下载地址过期等情况。把任务查询和产物验收做成可重复流程,团队才能在“大文件一直处理中”时找到明确恢复入口,而不必反复上传同一份文件碰运气。
在企业文档中验证
如果要把本文方法用于企业文档,可预约演示,结合实际资料核对协作、权限与集成方式。
需要在自己的环境中验证时,可先了解私有化部署方案,再确定试用范围与验收要求。