Linux搭建FastDFS文件服务器并实现springboot
二,搭建FastDFS文件服务器
1,首先需要安装需要的依赖
yum -y install gcc-c++
yum -y install libevent
2,然后使用xftp
把需要的压缩包上传到Linux
服务器,在/usr/local
文件夹中新建一个fastdfs
文件夹。
在这里插入图片描述
3,解压libfastcommon
tar -xvf libfastcommonV1.0.7.tar.gz
4,然后进行安装
[root@localhost fastdfs]# ls
fastdfs-nginx-module_v1.16.tar.gz FastDFS_v5.05.tar.gz libfastcommon-1.0.7 libfastcommonV1.0.7.tar.gz nginx-1.8.1.tar.gz
[root@localhost fastdfs]# cd libfastcommon-1.0.7
[root@localhost libfastcommon-1.0.7]# ls
HISTORY INSTALL libfastcommon.spec make.sh README src
[root@localhost libfastcommon-1.0.7]# ./make.sh
[root@localhost libfastcommon-1.0.7]# ./make.sh install
libfastcommon
安装好之后会自动将库文件拷贝至usr/lib64
下,由于FastDFS
程序引用/usr/lib
目录,所以需要把/usr/lib64
下的库文件拷贝至/usr/lib
下。
拷贝命令
cd /usr/lib64
cp libfastcommon.so /usr/lib
查看/usr/lib
目录下是否存在该文件
[root@localhost lib64]# find /usr/lib -name libfastcommon.so
/usr/lib/libfastcommon.so
5,开始安装FastDFS
进到/usr/local/fastdfs
目录中进行解压
tar -xvf FastDFS_v5.05.tar.gz
安装
[root@localhost fastdfs]# ls
FastDFS fastdfs-nginx-module_v1.16.tar.gz FastDFS_v5.05.tar.gz libfastcommon-1.0.7 libfastcommonV1.0.7.tar.gz nginx-1.8.1.tar.gz
[root@localhost fastdfs]# cd FastDFS
[root@localhost FastDFS]# ls
client common conf COPYING-3_0.txt fastdfs.spec HISTORY init.d INSTALL make.sh php_client README.md restart.sh stop.sh storage test tracker
[root@localhost FastDFS]# ./make.sh
[root@localhost FastDFS]# ./make.sh install
安装成功后将安装目录下的conf
下的文件拷贝到/etc/fdfs
下。(nginx需要)
conf
文件目录在/usr/local/fastdfs/FastDFS/conf
,进到这个conf
目录
cp * /etc/fdfs/ 拷贝全部文件到fdfs目录下
6,安装tracker
服务(跟踪服务)
[root@localhost conf]# cd /usr/local/fastdfs/FastDFS/tracker/
[root@localhost tracker]# pwd
/usr/local/fastdfs/FastDFS/tracker 这个路径设置为base_path路径(下图)
# 编辑tracker.conf配置文件
[root@localhost tracker]# vim /etc/fdfs/tracker.conf
修改base_path
路径为
保存退出,然后启动
# 启动
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
# 重启的话是restart
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
7,安装storage
服务(存储服务)
[root@localhost storage]# pwd
/usr/local/fastdfs/FastDFS/storage 这个路径设置为base_path路径(下图)
[root@localhost storage]# vim /etc/fdfs/storage.conf
修改base_path
路径
启动
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
8,到此为止,两个服务都安装完成了,现在测试是否安装成功。
将/usr/local/fastdfs/FastDFS/client
里面的libfdfsclient.so
拷贝到/usr/lib
下,<font color="red">这一步非常重要</font>。
cd /usr/local/fastdfs/FastDFS/client/
cp libfdfsclient.so /usr/lib
修改配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tTEpChXG-1572494243009)(D:\文件笔记\image\1572443620894.png)]新建一个在root
根目录创建一个html
文件,内容为hi,fastdfs!
。
测试上传
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/hi.html
出现下面的情况就是安装成功了,并且文件上传成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wkFWaHlm-1572494243010)(D:\文件笔记\image\1572444079589.png)]文件存在了哪里呢?这里
[root@localhost 00]# pwd
/usr/local/fastdfs/FastDFS/storage/data/00/00
[root@localhost 00]# ll
total 16
-rw-r--r--. 1 root root 12 Oct 30 09:57 wKi6gV25lreAJiwIAAAADP8d-tA34_big.html
-rw-r--r--. 1 root root 49 Oct 30 09:57 wKi6gV25lreAJiwIAAAADP8d-tA34_big.html-m
-rw-r--r--. 1 root root 12 Oct 30 09:57 wKi6gV25lreAJiwIAAAADP8d-tA34.html
-rw-r--r--. 1 root root 49 Oct 30 09:57 wKi6gV25lreAJiwIAAAADP8d-tA34.html-m
[root@localhost 00]#
其实到这一步,这个上传的文件的路径已经出来了。
http://192.168.186.129/group1/M00/00/00/wKi6gV25lreAJiwIAAAADP8d-tA34_big.html
但是在浏览器中还不能够直接访问文件。
三,安装nginx及插件实现资源的访问
为什么需要nginx
呢?
因为FastDFS
本身并不具有处理http
协议的能力,而客户端正是通过http
协议访问的,因此在浏览器中不能够直接访问文件就讲得通了。
如何处理?
说白了,需要nginx
服务器作为中间件,因为nginx
具有处理http
协议的能力,然后安装nginx+fastDFS
的插件,目的是建立nginx
和FastDFS
服务器的联系以供访问。
nginx
及nginx
插件
yum install gcc-c++ (前面已经安装过)
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
2,进到/usr/local/fastdfs
目录下,解压nginx-fastDFS
插件
tar -zxf fastdfs-nginx-module_v1.16.tar.gz
3,进到/usr/local/fastdfs/fastdfs-nginx-module/src
下,修改config
配置文件
把路径上的local
全部去掉,并保存退出。
4,把/usr/local/fastdfs/fastdfs-nginx-module/src
下的mod_fastdfs.conf
文件复制到/etc/fdfs
目录下,并编辑该文件。
[root@192 src]# cp mod_fastdfs.conf /etc/fdfs/
[root@192 src]# vim /etc/fdfs/mod_fastdfs.conf
在这里插入图片描述
5,安装nginx
进到/usr/local/fastdfs
压缩包目录,解压nginx
压缩包
tar -zxf nginx-1.8.1.tar.gz
关联nginx
和nginx
的插件
[root@192 fastdfs]# cd nginx-1.8.1/
# 关联操作
[root@192 nginx-1.8.1]# ./configure --add-module=/usr/local/fastdfs/fastdfs-nginx-module/src
[root@192 nginx-1.8.1]# make 编译
[root@192 nginx-1.8.1]# make install 安装
可以看到,nginx
被安装到了/usr/local
目录下
到/usr/local/nginx/conf
目录下,修改nginx
的配置文件nginx.conf
,保存退出。
启动nginx
[root@192 sbin]# pwd
/usr/local/nginx/sbin
[root@192 sbin]# ./nginx
然后现在就可以在浏览器访问刚才那个文件的路径了。
在这里插入图片描述四,springboot访问FastDFS实现文件上传
1,添加依赖
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.1-RELEASE</version>
</dependency>
2,在启动类上添加注解引入配置文件类
@Import(FdfsClientConfig.class)
3,在application.properties
加入FastDFS
的相关配置
# 超时时间
fdfs.so-timeout=1500
# 连接的超时时间
fdfs.connect-timeout=600
# 连接池
fdfs.pool.jmx-enabled=false
# 缩略图尺寸
fdfs.thumb-image.height=100
fdfs.thumb-image.width=100
# tracker服务跟踪器的地址
fdfs.tracker-list=192.168.186.129:22122
这里插一句,提前先把linux的防火墙设置为22122端口和23000端口放行,否则后续的测试会因为连不上跟踪器报错。
@Autowired
FastFileStorageClient fastFileStorageClient;//直接引入
@RequestMapping("/fastdfs")
@ResponseBody
public String fastdfs() throws FileNotFoundException {
File file=new File("D://文件笔记//image//1571884758247.png");
//文件名
String fileName=file.getName();
//后缀名
String extName=fileName.substring(fileName.lastIndexOf(".")+1);
//创建流
FileInputStream fileInputStream=new FileInputStream(file);
//四个参数(输入流,文件大小,后缀名,null),返回一个路径
StorePath storePath = fastFileStorageClient.uploadFile(fileInputStream, file.length(), extName, null);
//不同路径
System.out.println(storePath.getFullPath());
System.out.println(storePath.getPath());
System.out.println(storePath.getGroup());
return "图片上传成功,并调皮的给您返回一个路径";
}
分别看浏览器和控制台
在这里插入图片描述然后在浏览器输入访问路径(nginx的ip地址和端口加上storePath.getFullPath()
的路径),例如
http://192.168.186.129:80/group1/M00/00/00/wKi6gV26SV6ALJu6AAB5lQx82SU564.png
然后就可以访问刚才上传的图片了
在这里插入图片描述五,改造成业务代码
html
表单项
<form action="/demo/fastdfs" method="post" enctype="multipart/form-data">
fastDFS测试:<input type="file" name="test"><input type="submit" value="测试上传">
</form>
controller
上传业务代码
@Autowired
FastFileStorageClient fastFileStorageClient;
/**
*fastDFS服务器测试文件上传
*/
@RequestMapping("/fastdfs")
@ResponseBody
public String fastdfs(@RequestParam(value = "test") MultipartFile test) throws IOException {
//文件名
String fileName=test.getOriginalFilename();
//后缀名
String extName=fileName.substring(fileName.lastIndexOf(".")+1);
//四个参数(输入流,文件大小,后缀名,null),返回一个路径
StorePath storePath = fastFileStorageClient.uploadFile(test.getInputStream(),test.getSize(), extName, null);
//不同路径
System.out.println(storePath.getFullPath());
System.out.println(storePath.getPath());
System.out.println(storePath.getGroup());
return "图片上传成功,并调皮的给您返回一个路径";
}
控制台打印
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FjUqMhh8-1572494243015)(D:\文件笔记\image\1572491669585.png)]把第一条路径,也就是storePath.getFullPath()
这样得到的路径拼接到nginx
的ip地址和端口后面,在浏览器进行访问,可以访问到上传的图片。
<font color="red">说明:如果上传的是一个文件,这里比如上传一个docx
格式的word
文档,那么上传成功之后返回的那个路径,group1/M00/00/00/wKi6gV26VG2AG36RAAeqJLEbOEY03.docx
,拼接路径之后http://192.168.186.129/group1/M00/00/00/wKi6gV26VG2AG36RAAeqJLEbOEY03.docx
,在浏览器直接访问这个路径的话会直接把这个word
文档下载下来,图片的话就只是查看。</font>
<font color="blue">原因是什么?是因为浏览器的缘故,如果文件格式可以被浏览器解析的话,浏览器会展示该文件,不会下载,解析不了的文件才可以下载,为什么是这样我也不太清楚。</font>
在这里插入图片描述FastDFS
服务器和nginx
的部署以及springboot
项目上传文件到FastDFS
服务器圆满结束!