网站大量无用图片如何处理?

tpwonline
  • 242

比如富文本这样的功能,或者一些存储图片的字段。
当执行编辑操作的时候,有时候数据库中新图片会替代旧图片(旧图片链接名称在数据库中不存在了),但旧图片的文件还存在在硬盘中。

这种已经没用的图片一般如何处理?

我想到的方案:

方案1:在编辑的时候就把没用的图片一同处理掉,但这样会增加很多代码量,因为很多图片的存储结构不同,需要在各个功能代码处写专门的处理函数。

方案2:定期处理。扫描图片在各个表中是否用到,没有用到就删除。但这样做的话,如果增加了新的功能,还要去添加"要扫描的表和字段",遗漏的话会造成误删。

方案3:不处理。冗余图片不会对网站产生大的影响(猜测)。

求解答。

评论
阅读 1.7k
5 个回答
✓ 已被采纳

建一个图片文件表:

create table pic(
id int,
path varchar(256),
md5 varchar(32),
size int,
refer_count int,
)

refer_count 为引用计数,多少文章里用到了,就是多少,文章修改时,先减少再增加,少到为零就可以删了。
用md5做摘要,可以把重复上传的图版合二为一。size和可以与用户结合进行配额限制,防止被恶意使用。

微博应该是不处理的,所以以前才能有微博图床这种东西(现在是防盗链用不了了)
而且存储成本相比cpu、内存、带宽、流量是便宜得多的多,一般应该都不处理吧
建图片文件表倒也是个解决方案,就是怕服务崩溃后可能导致表里的图片计数和实际对应不上,回头把不该删的图给删了就不好了

建议不处理,因为一般占用空间大小或比例不多。

如果要处理就使用定期扫描即可,不需要使用表,作为一个额外的清理功能,不增加本身的复杂度,定时任务加载全部markdown转html分析img src即可(富文本直接拿到html内容然后goquey提取),然后diff下删除未引用的资源。

markdown转html可以使用go库转成html然后goquery分析img,或者cdp加载markdown渲染html然后分析出img。

一般不处理,硬盘又不值钱,加就完事了

其实你图片肯定有一个上传的入口。在上传的入口地方生成一个唯一id(比如一个文章内容一个唯一id),关联id口与图片。当文章被删除之后,把对应的图片删掉。

宣传栏