文件能否像缓存一样, 过期自动删除?

注册时给头像上传单独做了一个 ajax接口, 并返回了文件地址 ( 文件不在 upload_tmp_dir 中了 ),
那么如果用户没有继续注册,存下的图片不是越来越多?
有没有办法给文件设置一个过期时间, 像缓存那样, 自动就过期了

  • 能想到的是设置crontab, 判断文件的时间来删除.  
  • 或者把文件路径存到缓存(如redis)中, 在缓存过期删除前能否调用个什么方法,取出里面的文件路径,进行文件删除 ???
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8

这个问题其实不需要自己造轮子,有个最基础的办法:

在 CentOS 之类的 Linux 发行版里,内置了一个名叫 tmpwatch 的服务,它可以监控临时文件,并根据文件的最后访问时间,删除那些较老的文件。

当然,如果你是用 Ubuntu,也可以自己安装。

文档在这里:https://linux.die.net/man/8/tmpwatch

4年前 评论

上传的头像直接放在 /avatars/tmp, 然后用户提交之后, 去 /avatar/tmp 移动真正的文件到 /avatars 目录即可, 每天定时删除 /avatars/tmp 目录 即可, 也不用查数据库有没有存在.
而且这种担心没必要(压缩一下图片能有多大, 实在不行限制一下次数), 要真有这么多用户, 你怕什么呢. 你会不会害怕用户越来越多把数据库撑爆了.

4年前 评论

注册时应该只在前端显示一个预览吧 , 真正点击注册的时候才上传 , 就没这种骚操作了

4年前 评论

你怎么判断哪些文件要删除呢?其实没你想的这么麻烦,直接每天跑个定时脚本,对比数据库里面用户的头像和实际文件夹中的文件,取个差值,删除就行,建议在没有用户使用的时候执行

4年前 评论

@FMW 决定用队列的 delay 来做了,就是图片上传接口里面执行队列任务

至于文件,会在真正注册的时候转存到另一个文件夹去,这样30分钟没有点击注册也就算过期了,可以删除了,不会误删

4年前 评论

也是一个办法,不过我觉得可以再简单点,30分钟后直接判断数据库头像字段有没有这个文件名,没有就删除

4年前 评论

@twisted-fate 对于图片确实可以这么处理。
我这实际上是一个文件,前端要做成element ui 里面文件上传的进度条。。。。要不然我就直接把文件和其他表单一起提交了。
不知道文件怎么做成一个预览,js 的 blob 貌似可以研究看看

4年前 评论

@beatles 我昨天搜了一下

用户选择图片之后的渲染方法有两种

本地路径方法转化 window.URL.createObjectURL
FileReader转化为base64格式

https://blog.csdn.net/LLDD2014425/article/...

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!