在处理文件上传功能时(尤其是带表单的复杂提交),我们常遇到一个头疼的问题:用户可能在上传文件后,最终并未提交表单。 这些被“半途而弃”的文件会永久占用OSS存储空间,成为无效的“存储垃圾”,长期累积下来,是一笔不必要的浪费。
为解决这个问题,我设计并实施了一套 “临时目录隔离 + 生命周期管理” 的优雅方案,核心流程如下:
1. 前端预上传(到临时区)
- 用户选择文件后,前端先向后端申请一个仅具有临时目录(
temp/)上传权限的OSS凭证。 - 前端使用该凭证,将文件直接上传至OSS的
temp/目录下。
2. 表单正式提交(文件“转正”)
- 用户提交完整表单时,后端接收到之前暂存的文件路径。
- 后端服务调用OSS的
CopyObject 接口,将文件从temp/目录复制到正式的业务目录(如article/或user_avatar/)下。 - 复制成功后,在数据库中记录正式路径,完成业务绑定。
3. 垃圾自动清理(核心保障)
- 在OSS控制台,为
temp/目录设置一条生命周期规则,例如:自动删除创建时间超过1天的文件。 - 这意味着,任何未能及时“转正”的临时文件,无论是因为用户放弃提交,还是程序异常,都会在一天后被自动、静默地清理掉,无需人工干预。