文件上传接口要先考虑失败场景

文件上传看起来只是接收文件再保存,但真正上线后会遇到很多失败场景:格式不对、文件过大、存储失败、业务绑定失败、用户重复上传、临时文件没人清理。

校验要前置

上传接口应该尽早校验文件类型、大小、业务场景和用户权限。校验越靠后,浪费的资源越多,也越容易留下半成品。

文件类型不能只相信文件名。文件名可以被随意修改,服务端至少要结合实际内容、业务白名单和存储策略一起判断。

存储和业务要解耦

文件保存成功,不代表业务处理成功。比如头像上传成功,但更新用户资料失败;合同文件保存成功,但业务单据创建失败。这时要有清理或补偿策略。

我更喜欢把文件先作为临时资源保存,等业务绑定成功后再转成正式资源。这样失败时更容易清理。

返回值要方便后续使用

上传成功后,接口不应该只返回一个地址。更稳定的方式是返回文件标识、访问地址、原始文件名、文件类型和业务状态。前端用地址展示,后端用文件标识继续处理。

这样后续换存储方式时,对外接口也更稳定。

复盘

文件上传接口的重点不是把文件传上去,而是把失败、清理、权限、业务绑定这些边界处理清楚。越是看起来简单的接口,越容易藏工程细节。

参考