图片展示模块---使用FastDFS上传图片

1、背景分析

对于传统项目来说,所有模块都在一个项目中开饭,包括所有的静态资源文件如图片等,都存储在这一个tomcat服务器上,

  如果访问量小的话,这样做的问题不大,但是对于互联网项目来说,用户访问量很大,这样一个tomcat服务器是远远不能满足业务需求的。这时就需要部署tomcat集群,有集群就需要用到负载均衡,我们一般都会使用nginx来作为负载均衡服务器。

但是这种tomcat集群的缺点也很明显,假如我们把一张a.jpg的图片上传到了tomcat1的目录下了,由于nginx负责均衡处理请求,当用户去请求访问这张图片的时候,假设第一次,nginx把请求交给tomcat1去处理,它到自己的images目录下找这张图片,发现是可以找到的,可以看到这张图片;当我们第二次通过nginx去请求访问该图片时,nginx把请求交给tomcat2去处理,这时tomcat2去自己的目录下查找这张图片,发现没有这张图片,因此看不到这张图片。作为用户来讲,一次访问能看到,再刷新看不到,再刷新就看不到,这样体验感很差。

针对此问题,搭建一个图片服务器,所有的tomcat都将用户上传的图片上传到图片服务器上,tomcat本身并不保存图片。我们采用http的方式来访问图片,这样就需要使用http服务器,能作为http服务器的有很多种选择。

  • Tomcat可以作为http服务器,但是由于Tomcat服务器的强项并不在于处理静态资源(它的强项是处理servlet和jsp等动态页面),因此我们不选择tomcat
  • 使用Apache作为http服务器,Apache是由c语言编写的一款服务器。
  • nginx因为其独特的优势,作为http服务器是目前最火的。我们使用Nginx来统一管理这些图片,这样用户要访问图片的时候,Nginx直接把服务器上的图片返回就可以了,这样就解决了tomcat集群资源无法共享的问题。

此时存在一个问题,既然是服务器,容量是有限制的,而且服务器有可能挂了,这时使用FastDFS集群来解决,FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。FastDFS存储资源的设备是按组来区分的,当存储空间不足时,便可以通过水平增加分组并相应添加设备来达到扩容的目的,而且是没有上限的。它还有个优势是高可用,也就是说FastDFS集群能够做到当提供服务的nginx发生故障时,自动切换到另一台nginx设备上,保障服务的稳定。 

2、上传文件的步骤

  1. 创建一个配置文件,配置文件的内容是指定TrackerServer的地址
  2. 使用全局方法加载配置文件
  3. 创建一个TrackerClient对象
  4. 通过TrackerClient对象获得TrackerServer对象
  5. 创建StorageServer的引用,null就可以了
  6. 创建StorageClient对象,需要两个参数,一个是trackerserver,一个是storageserver
  7. 使用StorageClient对象,上传图片。

  此时创建一个工具类FastDFSUtils工具类。

posted @ 2018-09-17 14:44  菠菜汤圆  阅读(1064)  评论(0编辑  收藏  举报