文件能否像缓存一样, 过期自动删除?
注册时给头像上传单独做了一个 ajax接口, 并返回了文件地址 ( 文件不在 upload_tmp_dir
中了 ),
那么如果用户没有继续注册,存下的图片不是越来越多?
有没有办法给文件设置一个过期时间, 像缓存那样, 自动就过期了
- 能想到的是设置crontab, 判断文件的时间来删除.
- 或者把文件路径存到缓存(如redis)中, 在缓存过期删除前能否调用个什么方法,取出里面的文件路径,进行文件删除 ???
你怎么判断哪些文件要删除呢?其实没你想的这么麻烦,直接每天跑个定时脚本,对比数据库里面用户的头像和实际文件夹中的文件,取个差值,删除就行,建议在没有用户使用的时候执行
@FMW 决定用队列的 delay 来做了,就是图片上传接口里面执行队列任务
至于文件,会在真正注册的时候转存到另一个文件夹去,这样30分钟没有点击注册也就算过期了,可以删除了,不会误删
也是一个办法,不过我觉得可以再简单点,30分钟后直接判断数据库头像字段有没有这个文件名,没有就删除
注册时应该只在前端显示一个预览吧 , 真正点击注册的时候才上传 , 就没这种骚操作了
@twisted-fate 对于图片确实可以这么处理。
我这实际上是一个文件,前端要做成element ui 里面文件上传的进度条。。。。要不然我就直接把文件和其他表单一起提交了。
不知道文件怎么做成一个预览,js 的 blob 貌似可以研究看看
这个问题其实不需要自己造轮子,有个最基础的办法:
在 CentOS 之类的 Linux 发行版里,内置了一个名叫
tmpwatch
的服务,它可以监控临时文件,并根据文件的最后访问时间,删除那些较老的文件。当然,如果你是用 Ubuntu,也可以自己安装。
文档在这里:https://linux.die.net/man/8/tmpwatch
@beatles 我昨天搜了一下
用户选择图片之后的渲染方法有两种
本地路径方法转化 window.URL.createObjectURL
FileReader转化为base64格式
https://blog.csdn.net/LLDD2014425/article/...
上传的头像直接放在 /avatars/tmp, 然后用户提交之后, 去 /avatar/tmp 移动真正的文件到 /avatars 目录即可, 每天定时删除 /avatars/tmp 目录 即可, 也不用查数据库有没有存在.
而且这种担心没必要(压缩一下图片能有多大, 实在不行限制一下次数), 要真有这么多用户, 你怕什么呢. 你会不会害怕用户越来越多把数据库撑爆了.