文件上传的一点疑惑,大佬们进来讨论讨论

2021-09-06 17:34:13 +08:00
 supuwoerc

最近自己在翻新博客,遇到了个痛点,旧博客的文件上传之后我是不会去删除这个文件的,每次更新或者添加都是只更新数据库的字段,实际文件夹里面的文件是不会删除的,但是重构的时候我考虑到这个问题了,没法在文件夹中分辨出哪些文件是无用的,哪些是有用的。

于是新的数据库设计文件上传这块的时候我先把这条上传记录的 active 字段设为 0,保存表单时去设置 active 为 1,然后弄个定时任务去删除 active 为 0 对应的文件。

就在刚刚,我又想到一个问题,如果我文件上传完到保存表单之间定时任务把这个上传的文件给删了怎么办?!那岂不是文件就 404 了。。

一下就陷入了迷茫之中。。。难以自拔。

PS:大佬可以说一下合理的做法,小弟我是个前端,只会玩点简单的 SpringBoot(),最近学习到 Quartz,所以打算翻新自己的博客练手加折腾两不误,轻喷~~~

807 次点击
所在节点    问与答
8 条回复
XiaoxiaoPu
2021-09-06 17:39:20 +08:00
简单点,定时任务只删除创建时间在一段时间之前的文件,比如只删除一天之前创建的且 active 为 0 的文件
Vegetable
2021-09-06 17:44:57 +08:00
真迷惑哈,diff 一下,删掉没有引用的文件就行了啊,既然你已经读库了,直接两个条件:数据库中没有引用,且上传超过 N 分钟,就删除。脚本设置全量和增量,第一次跑全量,定时任务跑增量。
supuwoerc
2021-09-06 17:47:45 +08:00
@XiaoxiaoPu 感谢大佬回复,这确实是个办法,不过极端点的情况就是文件上传是 23:30,编辑好表单点击保存的时间是 00:01,这样跨越时间范围但又在删除情况之内的咋办呢?是否只能扩大这个时间来容忍这种情况呢?(比如一个表单开了一天再去保存)。
eason1874
2021-09-06 17:50:59 +08:00
@supuwoerc #3 “一天之前”不是“前一天”,一天以前是 time() - 24*60*60,不存在你说的 11 点 59 分过一分钟就是过了一天的问题。

有一种做法是:文件归文件,引用归引用;文件只要上传了不管有没有引用就在媒体库,当有文章引用时就标记被引用;媒体库可以筛选未被引用的文件,手动决定要不要清理。
supuwoerc
2021-09-06 17:53:08 +08:00
@Vegetable @XiaoxiaoPu 感谢二位大佬解答,我这就去改一改 =。=
supuwoerc
2021-09-06 17:54:45 +08:00
@eason1874 嗯嗯,感谢大佬,学到了,我太傻了,也没遇到过这种问题,学习了
FieldFarmer
2021-09-06 18:03:30 +08:00
以当前时间为准,之前未被引用的文件,一定是无用文件;之后的文件,取决于你希望临时上传的文件有效期是多少,举个例子,我上传一个文件,但是没保存表单,那么有用无用取决于多久之后我需不需要保存它,这就具有不确定性,你怎么能交给定时任务来判断。要是我,我直接定一个小时的有效期,上传的文件在一个小时内没有被引用,即可删除然后保存表单时校验文件是否还存在,不存在就提示文件已过有效期重新上传,仍然存在就直接保存(不考虑定时任务和保存表单并发情况)。
supuwoerc
2021-09-06 18:12:21 +08:00
@FieldFarmer 感谢大佬回复,大家都提到了定一个过期时间来处理这个问题,学习到这个思路了!~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/800216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX