A.文件服务器的种类
1.Tomcat,2.Nginx,3.SQL-Blob,4.第三方存储(阿里OSS,七牛云存储
目录
等)
B.开发时碰到的误区
文件存储在项目的一个路径当中,通过项目的相对路径达到下载的目的
在本地调试时可以下载,线上时由于获取不到流导致空白页(仅针对springboot项目)
误区1:认为本地可以下载,线上就能
C.talk to myself
问:这里就会涉及到一个文件共享的问题,我们为什么本地可以访问?
答:我们登录的是自己的系统,我们本身就是有权限访问本地磁盘的任何路径的,也就是说,如果你的路径+文件名称只要是没有问题的话,是可以访问的,我们试着拼一下url http://127.0.0.1/myProject/file/myPic.jpg可以访问,应为这个相应的地址是在你的D盘的项目路径底下的/file文件夹内,那如果是其他用户远程访问你的路径可不可以呢,答案是否定的
D.再说说springboot 项目和传统项目的区别
当我们在传统项目当中我们通过项目打包成jar放到tomcat的webapp底下然后配置一下server.xml就可以访问到了,当通过上传到file路径底下,我们在通过项目路径然后访问到file底下的文件是可以做到访问的目的,因为我们本身可以吧tomcat当成一个FTP共享目录,tomcat已经帮助我们做了ftp共享了
springboot项目:我们都知道,springboot项目在打包的时候tomcat已经自动被打包到jar包当中了,所以和传统项目有一个目录结构的区分,传统项目是tomcat里面有jar,而springboot 项目是jar包里面有tomcat,那么有一个问题就是这个时候没有tomcat帮我们做ftp这一步了,此时我们再进行上传这时候文件到了那里去了呢?我找了一下是在/tmp/xxx/xxxx底下,所以,我们就不能够访问到我们的地址了
E.我们做一下归类
前三种文件服务器是中小公司或者说小公司采取的一种文件共享的方式,目的是减少成本,文件服务器有一定的风险,而很多运维采取的风险控制措施是ip限制,只允许某个ip区间进行访问,或者是只能内网访问,有点在于没有大小限制,访问速度快,与服务器共享带宽,缺点同样也很明显,那就是容易被攻击
第四种文件服务器是大公司采用的,与oss做对接,采用公钥的方式,服务器会返回不同的临时钥匙达到密保的目的,我们暂时不说优点,唯一的一个就是可能根据存储的大小,带宽的套餐而需要一些费用。
我们再单独说一下第三种存储方式,这种方式和路径无关,单纯的存储到数据库的二进制流当中,优点是可以进行权限控制,就像我们的接口一样的,达到存储安全的目的,那缺点很明显,那就是有瓶颈,当我们把二进制流写到数据库的时候是缓慢的,下载也是的,包括跨表访问,也会有一定的性能限制。
F.结语:那么我们采用哪种方式去存储我们的数据呢?
1。文件不太重要,数据不重要,性能要保证:我们可以采用前两种
2。文件重要,但是对性能这块要求不高:我们可以采用第三种
3。文件重要,也要保证性能:那么只能选用第四种了。