一、问题概述
应用上线后,用户经常往服务器上上传文件,有些文件上传之后被引用了,有些文件上传之后没被引用。
对于没有被引用的文件,就成了多余的垃圾文件。随着时间的推移,服务器上的垃圾文件越来越多,怎么办?
这样说可能有点抽象,举个具体的例子吧。
二、一个具体的业务场景
我们都发过朋友圈信息,发朋友圈信息时,上传了3张图片到服务器,上传之后又放弃发表。
当然微信的朋友圈有询问,是否保存草稿,如果选择否,就会彻底放弃这几张图片。
也就是说在点击否的时候,会通知服务器,彻底删除这几张图片。把没有引用的图片删除,也就不存在垃圾文件。
如果我们在朋友圈上传了3张图片,并没有点击回退,更没有点击保存草稿,而是在应用之外把应用划掉了。那会怎么样?
当然微信做得比较好,这种情况也把草稿保存了。
有些应用就没有这方面的处理,比如某条,再次进入的时候,刚刚填写的那条信息没了。客户端信息是没了,但是图片已经上传到服务器了,那几张图片成了没被引用的垃圾。
特别是网页端,更容易产生垃圾文件。
在网页端,上传图片,填写一半的资料,一不开心就把页面咔嚓了,那些已经上传到服务器的图片就容易成为垃圾文件,占用服务器的存储空间,给服务器端的存储造成负担。
之前一直没有考虑过这个问题,当服务器上的文件越来越多时,我们就需要把没有引用的垃圾文件清除,只留下有引用的有用文件。
那么应该怎么做呢?
三、解决方案
1、使用临时文件夹
用户把文件上传到服务器后,服务器先将文件保存到临时文件夹目录下,用户提交表单后,再将文件移动到指定的文件夹中。
另外,临时文件夹中的文件需要定期清理。
2、使用文件上传记录表
设计一张表【上传文件记录表】,用于存储上传文件的记录。
表结构:文件唯一标识、文件URL、文件被引用次数、创建时间、创建人、修改时间、修改人等字段。
用户把文件上传到服务器,服务器保存文件后,同时记录文件的上传记录,把【文件被引用次数】设置为0,未被引用。
当文件被引用时,更改这条记录的【文件被引用次数】。如果被多次引用时,就递增引用次数。
另外,定期检索【上传文件记录表】,对未被引用的文件定时清理,同时删除记录。
四、解决方案分析
第一种方案,涉及到文件的拷贝,如果文件大了、多了,都比较消耗内存。第二种方案,不需要拷贝文件,只需要更改引用次数就好,操作简单。
定时清理未被引用的文件是两个方案都需要的。
上面的两个解决方案,个人比较偏向第二种方案,实施起来更简单。
对于头像之类的可能多次上传的图片,可以采用每次上传使用相同文件名的命名方式,对文件进行覆盖,这样就不会有垃圾文件产生。
对于上面的两个方案,你有没有什么看法,还有没有其他更好的方案,欢迎一起探讨。
领取专属 10元无门槛券
私享最新 技术干货