关于文件上传的见解

博客链接:Cs XJH’s Blog

当下的业务中往往有文件上传等需求,那么笔者今天就来谈谈文件上传服务器的相关操作。

文件的存储路径

你或许对这个标题感觉到奇怪,不是随便找个合适目录下存储文件就完事了么,难道存储路径也有门道?

是的,网上有很多关于文件上传存储的教程。其中,大部分推荐的文件存储路径都类似2020/1/31/qwertyuiopasdf.jpg。那么,你想过为什么要以这样的路径存储么?

我认为原因有二:

  • 显而易见,使用上传日期作为文件存储的路径,不仅逻辑一目了然,而且有利于今后清除一些历史悠久的文件,为服务器腾出必要的硬盘空间,提高利用率。比如:用户一周或一个月前聊天记录中的图片。
  • 根据操作系统相关知识,如果将所有文件都存储在单个目录下,文件越积越多,那么该目录下文件的访问速度将不断下降。所以,将文件分目录存储,一定程度上可以缓解这个问题。

文件的唯一性存储

对于刚入门的读者而言,保证文件在服务器上存储仅有一个副本,听起来匪夷所思,但这常常是作为一个后端攻城狮所必须要做的。

其实这个实现起来并不困难。首先,我们都知道文件上传是通过二进制传输,当文件上传后,我们可以得到文件的二进制数据集。其次,相信大部分读者都使用过md5加密,简而言之就是,对于不同的数据集可以得到不同且唯一的加密字符串。

如此,通过对文件的二进制数据集进行md5加密得到的加密字符串即可以唯一的标识一个文件。将该加密字符串存入数据库中,如果上传的文件加密后的字符串在数据库中已存在,那么说明该文件存在数据库,否则,不存在。或许,对于这个逻辑你还听过它的另一个名字,一键上传

文件的命名

要保证目录下的文件命名不重复,其实,上面已经给出了一个很好的解决方案,就是使用文件的md5加密值作为文件的命名。

当然,也有一些其他的命名方式,比如:“文件名 + 当前unix时间戳”等,同样也是一个不错的选择

数据库中文件url存储

对于这个的处理,有一部分人选择存储文件的全路径,即:http://xxx/yyy/zzz.jpg,但更多的人则选择存储部分路径,即:2020/1/31/abcdefghijk.jpg

而笔者认为,为了项目的可扩展性考虑,第二种方式才是上上之选。因为如果想为项目提高访问速度,那么像文件这样的静态资源访问一定是瓶颈之一。所以,为了提高静态资源的访问速度,必然会考虑CDN提速。当你把服务器上的静态资源转移之后,如果数据库的存储的是http://xxx/yyy/zzz.jpg这样的路径,那么你将有的忙了,~偷笑

以上,便是个人对文件存储相关的见解,如有不同观点,欢迎下方留言,一起探讨。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值