上传后的异步扫描

为什么不能一传就可访问

很多风险只有拿到完整文件后才能判断:病毒、违规图片、敏感文档。如果文件一上传就变成「可访问」,风险文件会在扫描完成前就被下载出去。

所以上传完成后,文件应该进入扫描流程,而不是立刻可用。

状态流转

uploaded -> scanning -> available
                   -> rejected
                   -> manual_review
  • scanning:正在扫描,下载接口返回「处理中」或仅管理员可访问。
  • available:扫描通过,正常访问。
  • rejected:命中风险,禁止访问。
  • manual_review:机器无法判断,转人工。

为什么必须异步

扫描任务(病毒检测、内容审核、格式解析、缩略图生成)通常很耗时。如果同步处理,上传接口会被拖到几十秒甚至更久。

正确姿势:业务服务写入状态 → 投递任务到队列 → 扫描服务异步消费。这样上传接口保持轻快,扫描在后台完成。

扫描任务的健壮性

  • 任务可重试、可追踪(失败自动重投)。
  • 扫描结果幂等(重复结果不重复处理)。
  • 超时未扫描的文件要告警(可能队列积压)。
  • 扫描服务故障时,不能把所有文件都卡死在 scanning——要有降级策略。

异步处理的收益

收益说明
上传接口快不等待耗时扫描
可扩展扫描服务独立扩容
可治理队列积压、失败都可观测

一句话

文件上传后先进 scanning,异步扫描通过才 available——这是「风险文件不进可访问区」的关键设计。

下一节看文件权限控制,明确谁可以访问什么。

发现内容有问题?

告诉我们哪里需要改进。