FastDFS整合springBoot教程

编写该教程的目的

本教程基于已有的springBoot框架进行整合,springBoot构架部分不做教学
为了给自己做笔记,同时为所需童鞋少爬点坑。

目录

教程分为三部分:Linux部署、springBoot配置、单元测试

  1. 准备工作;
  2. FastDFS在linux安装、配置及测试;
  3. springBoot配置;
  4. 单元测试;

环境及所需文件

服务器:centos7 64
客户端:springBoot2.0
FastDFS_v5.08.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
libfastcommon-master.zip
nginx-1.8.zip
所以文件均上传至根目录操作且意需要gcc环境
所有包下载链接:https://pan.baidu.com/share/init?surl=N1qt7eCs9owR4yAfa_-mng
提取码:vpuh

FastDFS在linux安装、配置及测试

一、安装libfastcommon
安装 libfastcommon模块。解压缩libfastcommon
命令:unzip libfastcommon-master.zip

然后进入解压完的目录内
命令: cd libfastcommon-master/
命令: ./make.sh 编译完成
命令: ./make.sh install 安装

二、安装FastDFS_v5.08.tar.gz
解压缩FastDFS_v5.08压缩包
命令:tar -zxvf FastDFS_v5.08.tar.gz

然后进入解压缩后的目录内
命令: cd FastDFS-5.08/
命令: ./make.sh && ./make.sh install 编译并且安装

三、复制FastDFS-5.08目录内的所用到的三个配置文件到 /etc/fdfs文件夹内
命令: cp client.conf /etc/fdfs
命令: cp storage.conf /etc/fdfs
命令: cp tracker.conf /etc/fdfs
命令: cp http.conf /etc/fdfs
命令: cp mime.types /etc/fdfs
建立storage、tracker目录
命令:cd /
命令:mkdir -p /export/fastdfs/{storage,tracker}

四、修改 tracker.conf配置
命令:cd /etc/fdfs
命令:vi tracker.conf
打开后找到下面4处然后修改即可
disabled=false #默认开启
connect_timeout=60 #链接超时时间
base_path=/export/fastdfs/tracker #设置tracker数据文件和日志目录
http.server_port=9080 #默认端口是8080

启动tracker
命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
设置开机启动
命令:echo “/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart” >> /etc/rc.local
查看进程
命令:ps aux | grep tracker

五、修改 storage.conf配置
命令:cd /etc/fdfs
命令:vi storage.conf
打开后找到下面根据实际需求修改即可
disabled=false #默认开启
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/export/fastdfs/storage #设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
base_path0=/export/fastdfs/storage #实际文件存储路径,会放在生成的data目录下
tracker_server=100.100.100.100:22122 #我tracker_server服务器ip地址(根据实际情况修改,貌似不可以使用127.0.0.1)
http.server_port=9080 #设置 http 端口号

启动storage
命令:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
设置开机启动
命令:echo “/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart” >> /etc/rc.local
查看进程
命令:ps aux | grep storage

六、安装 fastdfs-nginx-module_v1.16模块
FastDFS通过tracker服务器,将文件放在storage服务器存储,但是同组存储器之间需要进入文件复制,有同步延迟的问题。也就是说,当客户端把文件上传到一个storage后,再从storage集群下载文件时,此时文件没有完成storage组的同步,会导致客户 端无法获取文件而发生错误,而fastdfs-nginx-module模块会把文件连接到用户上传的storage的服务器。

解压 fastdfs-nginx-module
命令: cd /
命令: unzip fastdfs-nginx-module.zip

修改config配置
命令: cd fastdfs-nginx-module/src/
命令: vi config

去掉这CORE_INCS一行路径中的local字符
在CORE_LIBS一行的lib后加上64来指定系统位数,32位则不加

把mod_fastdfs.conf复制到 /etc/fdfs/目录内
命令: cp mod_fastdfs.conf /etc/fdfs

七、配置nginx的模块
首先找到nginx的压缩包,然后解压
命令:cd /
命令:tar -zxvf nginx-1.8.0.tar.gz
然后进入nginx解压后的目录,会看到一个configure的文件,然后通过编译加入fastdfs-nginx的模块。
--prefix:指定nginx安装到哪个目录, add-module 后面加上 fastdfs-nginx-module的目录
命令: ./configure --prefix=/usr/local/nginx/ --add-module=../fastdfs-nginx-module/src/
命令: ./make
命令: ./make install

修改 nginx的配置文件
命令: cd /usr/local/nginx/conf
命令: vi nginx.conf
修改后的配置文件如下

修改mod_fastdfs.conf配置文件:
命令:vi /etc/fdfs/mod_fastdfs.conf
修改如下:
tracker_server=100.100.100.100:22122(根据实际情况修改)
url_have_group_name = true
store_path0=/export/fastdfs/storage/data

八、增加系统打开文件数的限制
命令:ulimit -SHn 102400

运维注意:我们在使用FastDFS的时候,需要正常关机,不要使用kill -9强杀FastDFS进程,不然会在文件上传时出现丢数据的 情况。

九、启动停止服务步骤如下:
1、启动命令:
启动tracker命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
查看进程命令:ps aux | grep fdfs
启动storage命令:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
查看进程命令:ps aux | grep fdfs
启动nginx命令:/usr/local/nginx/sbin/nginx

2、停止命令:
停止tracker命令:/etc/init.d/fdfs_trackerd stop
关闭storage命令:/etc/init.d/fdfs_storaged stop
关闭nginx命令:/usr/local/nginx/sbin/nginx -s stop

测试上传文件:
命令: /usr/bin/fdfs_test /etc/fdfs/client.conf upload /opt/xingji001.jpg

上传文件没有问题,且有网络地址返回,把网络地址贴到浏览器,如果能正常访问,则FastDFS服务器搭建完成

SpringBoot的FastDFS配置

新建一个springboot项目,在pom文件加入fastdfs-client-java包,用来调用FastDFS相关的API

<dependency>
	<groupId>com.github.tobato</groupId>
	<artifactId>fastdfs-client</artifactId>
	<version>1.26.6</version>
	<!-- 因为logback和logf4j日志有冲突,因为要屏蔽掉logback -->
	<exclusions>
		<exclusion>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</exclusion>
		<exclusion>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

在application.yml中配置FastDFS参数

# ===================================================================
# 分布式文件系统FDFS配置
# ===================================================================
fdfs:
  so-timeout: 1501
  connect-timeout: 601
  thumb-image:
    width: 150
    height: 150
  tracker-list:
  - 100.100.100.100:22122 #根据实际情况填写,可以配置多个tracker服务器地址
# - 100.100.100.101:22122

在启动类加上Import注解引入FdfsClientConfig服务

没错,就是这么简单粗暴,不需要再做任何其他配置。

SpringBoot的FastDFS功能测试

编写测试类

/**
 * FastDFS测试类
 * @author Zhuyd
 * @date 2019-08-06 13:39:10
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes=DemoApiApplication.class)
@WebAppConfiguration
public class FdfsTest {
	@Autowired
    private FastFileStorageClient storageClient;
    @Autowired
    private ThumbImageConfig thumbImageConfig;
    
    @Test
    public void testUpload() throws FileNotFoundException {
    	//对路径进行处理
    	String str="E:\\\\test\\\\123.png";
		String location=str.replace("\\\\", "/");
		File file = new File(location);
        // 上传并且生成缩略图
        StorePath storePath = storageClient.uploadFile(
                new FileInputStream(file), file.length(), "png", null);
        // 带分组的路径
        System.out.println(storePath.getFullPath());
        // 不带分组的路径
        System.out.println(storePath.getPath());
	}
    
    @Test
    public void testUploadAndCreateThumb() throws FileNotFoundException {
    	String str="E:\\test\\123.png";
		String location=str.replace("\\", "/");
        File file = new File(location);
        // 上传并且生成缩略图
        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);
    }
}

console输出

#带分组的路径
group1/M00/00/00/CgoLJV1JElmAM-0zAAC2qXxd6_M753.png
#不带分组的路径
M00/00/00/CgoLJV1JElmAM-0zAAC2qXxd6_M753.png
#带分组的路径
M00/00/00/CgoLJV1JElmAM-0zAAC2qXxd6_M753_150x150.png
#不带分组的路径
group1/M00/00/00/CgoLJV1JElqAFTuxAAC2qXxd6_M512.png
#获取缩略图路径
M00/00/00/CgoLJV1JElqAFTuxAAC2qXxd6_M512.png

得到图片真实服务器地址:
http:100.100.100.100:9080/group1/M00/00/00/CgoLJV1JElmAM-0zAAC2qXxd6_M753.png
http:100.100.100.100:9080/group1/M00/00/00/CgoLJV1JElqAFTuxAAC2qXxd6_M512.png

浏览器访问:
在这里插入图片描述
感谢各位的阅读,本教程结束,此教程为博主整理网络资料和实践后出的原创教程,转载请著名原著地址,感谢!
有什么不明白的和补充的欢迎留言。

Logo

更多推荐