熟悉公众号的小伙伴,应该知道里面后台素材库这个板块的内容。而我们在网站后台的开发时,也会用到资源库的概念。

资源库,是指把所有用户上传的文件记录起来的地方,比如说文件类型,大小,存放位置等等;

当我们需要避免用户重复上传,或者实现秒传,检验文件完整性等场景的时候,就要用到能够标识出这个文件的唯一标识,这个时候,就可以用到文件的md5值,或者哈希值。每个文件的每个状态都对应特定的值,我们可以通过比对这个值,来实现上述的3个场景

【场景】

避免重复上传

同一个文件,用户可能在不同的场景下上传多次,如果我们不对此进行相应的检验、去重,服务器的文件数量会越来越多,同时一些无效的文件也会保存在服务器上,造成空间浪费

实现秒传

秒传,实际上是和第一个场景提到的问题延伸。当用户不同场景上传同一个文件时,我们可以先检验资源库里面是否有这个文件,有则直接返回相对的资源路径,减少客户端等待的时间

校验文件完整性

在某些场景下,比如文档状态记录时,可能会需要比对当前文件是否无改动,这时候,就可以采用检验前后文件加密值的方式来进行区分文件是否未被修改

【实现思路】

1、建立资源表,用于保存文件相关信息,如文件类型,大小,加密值,存放路径等

2、接收前端上传文件时,先过去加密值,比对数据库数据,有则返回存放路径,实现秒传;否则执行文件保存,记录相关信息

3、利用资源表,定期处理未被关联的无效资源,降低空间浪费