用户上传冗余的图片文件,一般是怎么处理的呀?

2020-06-12 14:35:24 +08:00
 nyse

需要用户上传图片场景,比如传头像、发朋友圈,可能会遇到这些情况:

用户上传后,编辑内容,删掉原有的图片;

部分图片上传失败,导致用户又重新上传了一遍;

用户换头像;

...

等等情况,会导致服务器上存在用不着的冗余文件,浪费存储空间。

大家一般都是怎么处理这些情况的?

4774 次点击
所在节点    程序员
25 条回复
felinx
2020-06-12 14:39:51 +08:00
原始上传文件留个记录表,对于没有被正确关联引用到的,即可判断的不可能再被用到的可以清理掉。

用户换头像这种不一定,有些 APP 则有旧头像记录的。

原则就是可断定的无用的则可清除。
CodingNaux
2020-06-12 14:41:32 +08:00
md5 ?
emeab
2020-06-12 15:06:08 +08:00
随表单上传咯.
mostkia
2020-06-12 15:09:12 +08:00
一般直接替换文件吧。数据库内绑定图片的唯一 ID,然后用户如果需要替换,直接更新数据库里储存的 ID,同时删除旧的 ID 对应的文件。
lilydjwg
2020-06-12 15:12:41 +08:00
refcount 呗。或者你搞 mark-sweep gc 啥的也行。
also24
2020-06-12 15:13:29 +08:00
说真的,这些图片直接存起来可能成本更低
mokeyjay
2020-06-12 15:14:58 +08:00
一般就是让它冗余着
BlackBerry999
2020-06-12 16:36:53 +08:00
md5
kera0a
2020-06-12 17:00:50 +08:00
感觉没必要处理,多占不了多少资源。等产品倒闭了一起删就行。
zzzmh
2020-06-12 17:11:09 +08:00
举个例子,专门有一张 oss 表记录所有问题,如果是现在有一张头像,用户更新了一个新的头像,旧的就先软删除掉,然后 30 天没关联到任何地方且已软删除的,就连数据带文件一起删掉。也就只能做到这一步了。浪费是肯定存在的。
shuangya
2020-06-12 17:42:43 +08:00
公司一般也不在意那点空间……
实在在意的话,只有在某个地方记一下,然后定期清理……
xuanbg
2020-06-12 17:54:34 +08:00
链接和文件是引用关系,对于哈希值相同的文件来说,冗余的不过是个链接罢了。
John60676
2020-06-12 17:58:27 +08:00
现实是会存在不同文件,但是 MD5 相同的情况的...
caola
2020-06-12 18:06:19 +08:00
@nyse 把待删除文件的路径写到一个表里,定时器去检查这个表,再去执行删除文件操作

然而我是所有的文件的路径都记录在表里,删除时只是标记为删除(软删除),定时器去清理文件
clino
2020-06-12 18:19:55 +08:00
用 sha256 之类的命名文件,可以防止存多份重复文件
sujin190
2020-06-12 18:24:23 +08:00
如上所说,文件名用 hash,保证相同文件只存一份,其他的就无所谓了啊,反正现在磁盘页不值钱,删它干嘛
jugelizi
2020-06-12 19:26:33 +08:00
...第一 磁盘真不值钱
然后 头像地址可以用用户信息 hash 算出来 永远只有一张图片存在
至于发布的图片删除了 可以监控图片日志 冷数据移走
zsdroid
2020-06-12 21:18:49 +08:00
相对于流量来说,存储空间的费用可以忽略不计。
imdong
2020-06-12 22:10:56 +08:00
意义不大但真的坐过这个需求,我安排给一个新来的程序员做了。
他用了一个月的时间,这是我最痛苦的一个月…
因为他研究了一个星期,也不知道该咋整。
然后我说用 md5 存数据库就好了,
然后又一个星期过去了。还没搞定。
原来,md5($_FILE[0]->name),然后直接写到数据库了…
先不说对系统随机的文件名取 md5 的问题,他么存数据库也没有查是否存在…
我都懵逼了…………程序员可以有多菜???
zqx
2020-06-12 22:21:37 +08:00
操作系统是如何清理内存的?

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

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

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

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

© 2021 V2EX