思考

写在前面

从上面更新编辑文件夹,就一直在思考一个问题,之前编辑文件夹名称,只是逻辑上的修改,但是保存的物理文件或者文件夹名称并没有进行修改,这样就导致一个问题,就是在文件或者文件夹修改名称后就会找不到物理文件,因为路径或者文件名错误了。所以就有了这篇文章的思考。当然,修改物理文件确实能实现,但是会频繁的操作io,性能会非常的差,如果一个文件非常大,你可想而知这种效率有多么底下。

思考

今天有了一个更好的解决方案,在数据库中保存文件的逻辑数据,什么叫逻辑数据呢,比如不同路径的文件,在数据库中通过文件目录加以区别文件所在的位置不同,之前咱们也在文件信息的表中存入一个字段md5,众所周知,同一个文件的md5是相同的。这样我们就可以将上传的文件,物理保存在同一个目录中,不管你上传的文件在列表上在哪儿,实际在服务端保存的地方都是同一个目录下。当然这个时候我们就可以通过文件的md5作为文件名称。这样做的好处是,不同的用户上传同一个文件,我们就可以不重复的在硬盘中保存该文件,只是在数据库中,给该用户添加一个记录就行了,当然这个时候我们就需要保存一条md5和该用户上传的时候文件真正名称。

另外,这种方式,对于修改文件夹名称,我们只需要考虑数据库中的FolderPath字段和文件夹名称即可。并不需要考虑文件夹中有文件的情况。

第三个优点,既然有md5,为将来客户端实现秒传的实现奠定了基础。

理清思路,下一步,就以这个思路实现。