文件管理摘要:
1、统一存放在指定大目录下,以便后续的备份和搬迁
2、文件不建议全部集中在一个目录下,建议按属性和时间做多级分类
3、文件按来源,分成:上传文件、导入文件、系统输出的永久文件、系统输出的临时文件
4、文件按时限,分成:永久文件,定期文件(及临时文件)
5、文件按保密性,分成:保密文件,公开文件
6、文件校验,对文件做hash,定时hash校对
一、统一存放在指定大目录下,以便后续的备份和搬迁
个人遇到过,系统多人开发,没有统一的规范,文件随意多处存储。
然后系统占用的磁盘空间不断加大。后面哪天应对各种需求,需要搬迁系统的时候,发现系统几十到上百G的空间占用,而又无法有效的筛选文件,给搬迁工作造成极大的困难。
所以,个人系统的设计思路,文件统一放在根目录下的WebFiles目录下。系统搬迁的时候,先过滤WebFiles,把其他的先搬迁了。
二、文件不建议全部集中在一个目录下,建议按属性和时间做多级分类
个人不建议把所有文件都放在一个目录下,这样的话,后续系统读取该目录下面的文件的时候,会因为目录下的文件过多,读取速度变慢,慢慢成为系统的瓶颈。
个人设计的目录存放:WebFiles/UpForeverSaves/PmDocItem/2020/1/guid/xxx.xx
1、WebFiles:统一根目录
2、UpForeverSaves:放永久存放的文件;其他:OutForeverSaves:系统输出的永久文件;OutTimeSaves:系统输出的临时文件(指定时间删除);UpTimeTmps:用户上传的临时文件等等。
3、PmDocItem:对应的业务名
4、2020:年份
5、1:月份
6、Guid:(可选)一个GUID编码(或随机码),保证文件唯一性和不容易被路径猜出和下载
7、文件名
三、文件按来源和时限,分成:上传文件、导入文件、系统输出的永久文件、系统输出的临时文件
序号 | 名称 | 目录名 | 说明 |
1 | 永久上传文件 | UpForeverSaves | 1、用户上传的文件 2、永久保存 |
2 | 定期上传文件 | UpTimeSaves | 1、用户上传的文件 2、保存一段时间 3、如:合约的电子签名,当合约过期一段时间后就可以删除 |
3 | 永久输出文件 | OutForeverSaves | 1、系统输出的 2、永久保存的 3、如:2019年1月的财务报表 |
4 | 定期输出文件 | OutTimeSaves | 1、系统输出的 2、保存一段时间的 3、如:2019年户外拓展安排表 |
5 | 上传临时文件 | UpTimeTmps | 1、上传文件 2、临时的 3、系统读写操作完毕后建议系统自动删除的文件 4、如:导入车辆信息 |
四、文件按保密性,分成:保密文件,公开文件
1、目前设计没有考虑到怎么防止盗链下载,期望有技术大神给指导建议
2、目前设计考虑是通过一个随机的码或Guid实现目录的不可规律
3、在.net中可以考虑用Server.Transfer或Server.Execute做跳转,隐藏真实的下载路径
4、在.net中可以配置指定目录是否需要有Session认证才能访问,但这个是web.config的配置,有些文件是要求公开的,所以不一定能满足需求。
综述:目前设计,仅考虑用Guid+Server.Transfer实现防止盗链
五、文件校验,对文件做hash,定时hash校对
就是对文件的大小和整个文件做hash(代码没有,还没写出来),存入数据库中。然后不定时扫库和对文件做校验,反正相关的机密文件被篡改都不知道。