Article / 文章中心

利用SpringBoot云服务器的FastDFS实现文件上传

发布时间:2021-12-09 点击数:180

.2 环境前置要求

本地虚拟机/云服务器:CentOS7.x 版别

将FastDFS 和 Nginx 相关的软件压缩包下载完结并上传到云服务器中,下载链接如下:

nginx-1.18.0.tar.gz

libfastcommon-1.0.38.tar.gz

fastdfs-5.11.tar.gz

fastdfs-nginx-module-1.20.tar.gz

下载完结后如图:


image.png

image.png

将下载的压缩文件通过Xftp 6 上传到云服务器指定途径下,我指定的途径是:/usr/local/src/software

image.png

1.3 装置单节点的FastDFS

由于我这儿仅仅用FastDFS 去做文件服务器,个人开发不需求用到集群的FastDFS,而且个人也没有多台服务器的环境!假如有需求,能够找一篇关于FastDFS集群环境搭建的文章阅读!


1.3.1 装置gcc 和nginx 依靠库

由于FastDFS 本身便是淘宝的大牛用C语言写的,所以其依靠于对C进行编译的环境 gcc,装置指令如下:

yum -y install gcc 

除了gcc之外,还需求装置nginx 相关的依靠库,由于后续要装置 nginx 

yum install pcre pcre-devel yum install zlib zlib-devel yum install openssl openssl--devel yum install libevent 

留意:假如你本机装置的nginx压缩包不是tar.gz而是zip格局的,这时候需求自己下载一下解压zip格局文件的指令unzip,下载指令如下:

yum install -y unzip zip 
1.3.2 装置libfastcommon 咱们进入上传软件压缩包的途径:cd /usr/local/src/software
解压: tar -zxvf libfastcommon-1.0.38  进入解压完结后的目录: cd libfastcommon-1.0.38/  履行编译而且装置: ./make.sh ./make.sh install 

1.3.3 装置fastdfs

解压: tar -zxvf fastdfs-5.11.tar.gz  进入解压完结后的目录: cd fastdfs-5.11/  履行编译而且装置: ./make.sh ./make.sh install 

假如装置成功,会看到/etc/init.d/下看到提供的脚本文件:


image.png

  • fdfs_trackerd是tracker发动脚本
  • fdfs_storaged是storage发动脚本

能够在 /etc/fdfs/ 目录下看到默许的装备文件模板:

ll /etc/fdfs/  成果如下: -rw-r--r-- 1 root root  1461 Dec  9 20:26 client.conf.sample -rw-r--r-- 1 root root  7927 Dec  9 20:26 storage.conf.sample -rw-r--r-- 1 root root  7389 Dec  9 20:26 tracker.conf.sample 

tarcker.conf.sample 是tracker的装备文件模板

storage.conf.sample 是storage的装备文件模板

client.conf.sample 是客户端的装备文件模板

1.3.4 装备并发动tracker服务

FastDFS 的 tracker 和 storage 在刚刚的装置过程中,都已经被装置了,因此咱们装置这两种人物的办法是相同的。不同的是,两种需求不同的装备文件。


咱们要发动tracker,就修正刚刚看到的tarcker.conf,而且发动fdfs_trackerd脚本即可:


1)首先将模板文件仿制:

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf 

2)修正仿制后的装备文件:

vim /etc/fdfs/tracker.conf  # 修正的内容如下: base_path=/fastdfs_files/tracker                 # 自己指定的存储日志和数据的根目录 

image.png

由于自己指定的目录默许是不存在的,所以修正过装备文件后,咱们新建一下该目录:

mkdir -p /fastdfs_files/tracker 

留意:假如运用的是本地虚拟机请封闭防火墙,云服务器记得开放安全组对应的端口!下面是我的云服务器开放的端口,FastDFS 默许需求23000 和 22122 两个端口:

image.png

4)发动和中止:

发动tracker服务器: /etc/init.d/fdfs_trackerd start


中止tracker服务器: /etc/init.d/fdfs_trackerd stop


不过装置过程中,fdfs 已经被设置为系统服务,咱们能够选用熟悉的服务发动办法:

service fdfs_trackerd start         # 发动fdfs_trackerd服务,中止用stop 

查看FastDFS Tracker Server是否发动成功:

ps -ef | grep fdfs_trackerd 

image.png

假如是本地虚拟机,不想每次开机都重新发动该服务,能够将其设置为敞开自发动:

chkconfig fdfs_trackerd on 

1.3.5 装备并发动storage服务

过程类似于1.3.4

1)首先将模板文件仿制:

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf 

2)修正仿制后的装备文件:

vim /etc/fdfs/storage.conf  # 修正的内容如下: base_path=/fastdfs_files/storage                # 数据和日志文件存储根目录  store_path0=/fastdfs_files/storage              # 第一个存储目录  tracker_server=本机ip:22122             # tracker服务器IP和端口 

由于自己指定的目录默许是不存在的,所以修正过装备文件后,咱们新建一下该目录:

mkdir -p /fastdfs_files/storage 

3)发动和中止:

  • 发动storage服务器:/etc/init.d/fdfs_storaged start
  • 中止storage服务器:/etc/init.d/fdfs_storaged stop

引荐运用如下办法发动:

service fdfs_storaged start             # 发动fdfs_storaged服务,中止用stop 

能够运用ps -ef | grep fdfs查看进程:

image.png

假如是本地虚拟机,不想每次开机都重新发动该服务,能够将其设置为敞开自发动:

chkconfig fdfs_trackerd on 

再次提示:本地虚拟机封闭防火墙,云服务器敞开安全组端口

2. 运用nginx拜访FastDFS

2.1 装置fastdfs-nginx-module

2.1.1 解压

tar -zxvf fastdfs-nginx-module-1.20.tar.gz 

2.1.2 修正config文件

1)进入解压后的文件夹下的src目录

cd fastdfs-nginx-module-1.20/src/ 

image.png

2)编辑config

vim config

运用以下底行指令:

:%s+/usr/local/+/usr/+g

将所有的/usr/local替换为 /usr,这个才是正确的目录:

image.png

2.1.3 装备nginx与FastDFS关联装备文件

仿制 fastdfs-nginx-module-1.20 源码中的装备文件到/etc/fdfs 目录, 并修正:

cp /usr/local/src/software/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/  vim /etc/fdfs/mod_fastdfs.conf 

修正以下装备:

connect_timeout=10                       # 客户端拜访文件连接超时时长(单位:秒)  tracker_server=本机ip:22122      # tracker服务IP和端口  url_have_group_name=true                 # 拜访链接前缀加上组名  store_path0=/fastdfs_files/storage       # 文件存储途径 


仿制 FastDFS 的部分装备文件到/etc/fdfs 目录:

cd /usr/local/src/software/fastdfs-5.11/conf/  cp http.conf mime.types /etc/fdfs/ 

2.2 装置Nginx的插件

由于文章 1.3.1 末节已经装置了 nginx 依靠库,所以这儿不需求再装置:

# 假如前面没装置,这儿就需求装置虚啊 nginx依靠库: yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 

2.2.1 解压装置包

tar -zxvf nginx-1.18.0.tar.gz 

2.2.2 装备nginx装置包并指定fastdfs-nginx-model

# 进入解压后的nginx-1.18.0 目录: cd nginx-1.18.0/  # 履行以下指令: ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/src/software/fastdfs-nginx-module-1.20/src/ 

留意:在履行./configure装备nginx 参数的时候,需求将 fastdfs-nginx-moudle 源码作为模块编译进去。

2.2.3 编译并装置

make && make install 

2.2.4 发动nginx

装备nginx整合fastdfs-module模块,咱们需求修正nginx装备文件,在/opt/nginx/config/nginx.conf 文件中:

vim  /opt/nginx/conf/nginx.conf 


将文件中,原来的server 80{ ...}部分代码替换为如下代码:

server {  listen       80;  server_name  你的域名;  # 监听域名中带有group的,交给FastDFS模块处理  location ~/group([0-9])/ {  ngx_fastdfs_module;  }  location / {  root   html;  index  index.html index.htm;  }  error_page   500 502 503 504  /50x.html;  location = /50x.html {  root   html;  } } 

发动指令:

nginx           # 发动nginx  nginx -s stop    # 中止nginx  nginx -s reload  # 重新载入装备文件 

可通过ps -ef | grep nginx查看nginx是否已发动成功:

image.png

3. 运用SpringBoot 整合FastDFS

3.1 相关依靠


 com.github.tobato fastdfs-client

3.2 相关装备参数

# fastDFS 相关装备 fdfs:  so-timeout: 1501 # 读取超时时刻  connect-timeout: 601 # 连接超时时刻  thumb-image: # 缩略图装备  width: 60  height: 60  tracker-list: # tracker地址:你的虚拟机服务器地址+端口(默许是22122)  - 你的服务器ip:22122 

3.3 相关装备类

/**  * @Auther: csp1999  * @Date: 2020/12/10/11:29  * @Description: fastDFS 客户端装备类  */ @Configuration @Import(FdfsClientConfig.class) // 解决jmx重复注册bean的问题 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public class FastDfsClientConfig { } 

3.4 测验类中进行测验

/**  * @Auther: csp1999  * @Date: 2020/12/10/11:33  * @Description: 测验FastDFS 文件上传  */ @SpringBootTest @RunWith(SpringRunner.class) public class FastDFSTest {   // fastDFS 存储客户端  @Autowired  private FastFileStorageClient storageClient;   // 用于获取 fastDFS 图片缩略图  @Autowired  private ThumbImageConfig thumbImageConfig;   @Test  public void testUpload() throws FileNotFoundException {  // 获取本机要上传的文件  File file = new File("M:\\code\\IDEA\\leyou\\image\\lf.jpg");   /**  * 上传并保存图片  *  * 参数:  * 1-上传的文件流  * 2-文件的巨细  * 3-文件的后缀  * 4-能够不论他  */  StorePath storePath = this.storageClient.uploadFile(  new FileInputStream(file), file.length(), "jpg", null);   // 带分组的途径  System.out.println(storePath.getFullPath());   // 不带分组的途径  System.out.println(storePath.getPath());  }   @Test  public void testUploadAndCreateThumb() throws FileNotFoundException {  // 获取本机要上传的文件  File file = new File("M:\\code\\IDEA\\leyou\\image\\bz4.jpg");   /**  * 上传并保存图片而且生成缩略图  *  * 参数:  * 1-上传的文件流  * 2-文件的巨细  * 3-文件的后缀  * 4-能够不论他  */  StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(  new FileInputStream(file), file.length(), "png", null);   // 带分组的途径  System.out.println(storePath.getFullPath());   // 不带分组的途径  System.out.println(storePath.getPath());   // 获取缩略图途径  String path = thumbImageConfig.getThumbImagePath(storePath.getPath());  System.out.println(path);  } } 

先测验testUpload()办法,输出成果:

image.png

然后咱们就能够通过服务器ip地址/group1/M00/00/00/wKg4ZVsWl5eAdLNZAABAhya2V0c424.jpg,去拜访图片:


image.png

同理咱们测验testUploadAndCreateThumb()带缩略图的办法,输出成果如下:

group1/M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945.png         # 带分组的途径 M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945.png                # 不带分组的途径 M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945_60x60.png          # 缩略图途径 

咱们先看下不是缩略图的作用:ip地址/group1/M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945.png

image.png

再看下缩略图的作用:ip地址/group1/M00/00/00/rBHaFV_Rmq6AC7m3AAQvu4hOzN4945_60x60.png

image.png

图片巨细是咱们在装备文件中装备的宽高60px! 咱们能够到服务器/fastdfs_files/storage/data/途径下查看上传的图片:

image.png

SpringBoot整合FastDFS完结!