前后端分离的项目,有多处数据有附带图片。我写了一个专门用来上传图片的接口,产生一个图片的url存放到需要图片的数据表里。
这样用户如果修改了附件或者重传了,会产生很多没用的图片文件,有什么好的方案可以识别到这些无用的文件?
我现在的处理方法是在服务器上放了个定时任务,依次遍历这些数据表里的图片url,与目录下的图片文件名做对比,不在这些数据库里的就删除。但是这样需要把各个数据表硬编码到定时脚本里,感觉不够灵活。有没有比较通用的统一管理这些文件的方法?
前后端分离的项目,有多处数据有附带图片。我写了一个专门用来上传图片的接口,产生一个图片的url存放到需要图片的数据表里。
这样用户如果修改了附件或者重传了,会产生很多没用的图片文件,有什么好的方案可以识别到这些无用的文件?
我现在的处理方法是在服务器上放了个定时任务,依次遍历这些数据表里的图片url,与目录下的图片文件名做对比,不在这些数据库里的就删除。但是这样需要把各个数据表硬编码到定时脚本里,感觉不够灵活。有没有比较通用的统一管理这些文件的方法?
参考 巡云轻论坛 的做法,每上传一个文件就在指定目录生成一个文件锁(文件锁这个文本文件的名称由上传的文件名称和路径组成,文件里面没有内容),提交发表的内容后将文件锁删除。然后由定时任务遍历文件锁,超过时间(比如两小时)还存在的文件锁,就将文件锁对应的文件删除
我是这样的,前端上传的时候 图片放到临时文件夹里面(这个文件夹的图片 按时间1天后删除), 用户确定提交的时候找到临时文件夹对应的图片拷贝一份到新目录,入库并返回图片地址,用户编辑操作话的,找到原图地址删了, 在存一个新的就是拉。
一、可以在数据库中维护表-图片url列的关系,然后定期删除没用的图片(删除时注意不要删除刚上传但还未在数据库中保存url的图片)
步骤1:创建一个表table_column_img存放哪些表的哪个列中有图片url
id, table, column
1,user,avatar
2,user,bg_img
步骤2:定时查询都有哪些表的列中有图片url
select table, column from table_column_img
步骤3:
查询具体表-列中的图片url地址
select avatar from user
select bg_img from user
二、用户修改图片url时去删除旧图片(可以写个触发器,修改,删除时把图片url放到一个表中,然后定期去删除图片)
4 回答4.5k 阅读✓ 已解决
5 回答3.3k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
你应该再准备一个缓存池
图片上传先上传至缓存池 当图片与其他相关联的时候(真正被应用到,从缓存池移出至应用池 当修改或覆盖的时候就把应用池中的数据替换
再来个扫描任务 当数据待在缓存池超过一定时间就判定为垃圾数据 直接删除