../ writing

长音频转写,光等结果还不够

长音频不是上传完就有结果。分块上传、等任务、查结果,最后还得把临时文件收拾干净。

把上传和识别拆开

长音频的上传时间与识别时间都可能超出一次普通页面请求。OCRASR 的前端按 10 MB 分块上传,后端把长音频提交为异步识别任务;长音频输入上限为 1 GB。

任务提交后,调用者使用任务标识查询结果。这使“文件已经收到”和“识别已经完成”成为两个独立的状态。项目使用 SQLite 保存任务映射,前端持续查询任务结果。

通过临时对象传递音频

长音频链路使用私有 COS 存储桶,并生成预签名 URL,让识别服务读取音频。预签名链接是带有效期的访问方式,不能把它当作公开下载地址长期展示。

分块上传 → 完成组装 → 私有 COS 对象
                            ↓
                       预签名 URL
                            ↓
                提交识别任务 → 查询任务
                            ↓
                   结果与临时对象清理

结束之后也属于工作流

项目在查询到任务结束后清理 COS 临时对象。临时文件的生命周期因此是处理流程的一部分,而不只是额外的清理动作。

向使用者展示任务时,应区分等待、处理、成功和失败。阶段进度可以反映处理步骤,但后端没有提供的识别百分比,不应由前端用计时器伪造;查询到的真实状态才是有效信息。

next都是 PDF,为什么处理方式不一样