返回文章列表

招投标文件解析链路:上传、转换与归档

招投标平台里文件是业务的核心载体,标书、资质证明、报价文件都需要经过上传、解析、预览和长期归档。文件处理如果和主业务流程串在一起,很容易拖慢接口,也很难处理格式异常。实际落地时更适合拆成独立链路。

上传与安全检查

文件上传不是简单地接收文件并保存。正式存储前需要做类型检查、大小限制和病毒扫描。未通过检查的文件不能进入正式业务存储。

建议先落到临时区域,完成安全检查和基础校验后,再移动到正式存储。这样不会因为扫描失败把不完整文件暴露给其他业务模块。

解析与转换

不同格式的文件需要不同的处理方式,常见的是转换预览格式、提取文本、生成缩略图。这些工作耗时长,应该放到异步任务里执行。

每个文件任务需要有唯一的任务标识,任务处理要保证幂等:同一个任务被重试时不会生成重复文件或重复记录。解析失败需要重试,但重试次数有限,超过后进入人工处理队列。

def process_file(task_id):
    if task.is_done():
        return

    check_file(task_id)
    convert_preview(task_id)
    extract_text(task_id)
    archive_file(task_id)
    task.mark_done()

存储与归档

正式文件需要按照业务维度组织存储,而不是简单按上传时间堆放。目录或对象键至少应该包含项目、供应商、文件类型和版本信息,方便追溯。

归档文件不建议直接暴露给前端访问。下载必须走受控接口,通过权限校验后临时生成访问凭证,并记录下载日志。

失败与兜底

文件解析链路里最常见的失败原因是文件损坏、格式不兼容和解析库版本变化。失败任务要有明确的处理路径:

  • 自动重试,使用退避策略。
  • 重试仍失败时进入异常队列。
  • 系统提示用户文件状态异常,并提供重新上传入口。
  • 后台保留原始文件,便于人工检查。

文件链路的价值不在“能接收文件”,而在接收之后还能稳定解析、安全存储、随时追溯。把异步任务、幂等和人工兜底做好,文件处理才不会成为整个平台的不稳定点。