美文网首页spring boot个人学习Springboot 系列
Linux搭建FastDFS文件服务器并实现springboot

Linux搭建FastDFS文件服务器并实现springboot

作者: 樊不樊 | 来源:发表于2021-01-30 09:56 被阅读0次

    www.myblogs.cn/fastDFS

    二,搭建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路径为

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1wJMvxW-1572494243007)(D:\文件笔记\image\1572441918745.png)]

    保存退出,然后启动

    # 启动
    /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的插件,目的是建立nginxFastDFS服务器的联系以供访问。

    在这里插入图片描述 1,安装nginxnginx插件
    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全部去掉,并保存退出。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CPSnf4Lk-1572494243011)(D:\文件笔记\image\1572484739277.png)]

    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
    

    关联nginxnginx的插件

    [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目录下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OTdTvIax-1572494243013)(D:\文件笔记\image\1572486117626.png)]

    /usr/local/nginx/conf目录下,修改nginx的配置文件nginx.conf,保存退出。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SpO9V1NB-1572494243013)(D:\文件笔记\image\1572486540981.png)]

    启动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地址和端口后面,在浏览器进行访问,可以访问到上传的图片。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mFT2LoC2-1572494243016)(D:\文件笔记\image\1572491793124.png)]

    <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服务器圆满结束!

    相关文章

      网友评论

        本文标题:Linux搭建FastDFS文件服务器并实现springboot

        本文链接:https://www.haomeiwen.com/subject/mvdqtltx.html