求职表单AWS S3文件存储与数据库条目保存一致性问题咨询
解决AWS S3文件存储与数据库一致性问题的方案
核心思路:原子化校验+兜底清理,覆盖所有异常场景
1. 预签名URL+数据库事务实现原子化流程
- 后端生成S3预签名URL返回给前端,让前端直接将简历、头像传到S3,无需后端中转。
- 前端上传成功后,把两个文件的S3路径传给后端,后端启动数据库事务:
- 先校验手机号、邮箱的唯一性约束
- 调用S3的
headObject接口,确认两个文件已完整上传 - 校验通过后,在事务中插入数据库条目
- 若事务失败(如数据库报错),立即调用
deleteObject删除S3上的两个文件
2. 状态标记+定时任务兜底
- 给数据库求职申请表添加
status字段,可选值设为pending(待确认)、completed(已完成)、invalid(无效) - 后端插入数据时先设为
pending,确认数据库和S3操作都成功后,再将状态更新为completed - 编写定时任务(比如用AWS Lambda搭配CloudWatch定时触发),定期扫描
pending状态且超时(如1小时)的条目:- 删除对应S3文件
- 将数据库条目标记为
invalid或直接删除
3. S3生命周期规则自动清理孤立文件
- 给S3桶配置生命周期规则:
- 上传时先将文件放到临时目录(如
temp-applications/),数据库保存成功后,用copyObject将文件移至正式目录(如applications/),同时删除临时文件 - 配置规则:自动删除
temp-applications/下超过24小时的文件,即便后端未触发删除,S3也会自动清理孤立文件
- 上传时先将文件放到临时目录(如
内容的提问来源于stack exchange,提问作者Areeb Ahmad
相关产品推荐
相关产品推荐

