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环境
所有包下载链接:百度网盘
提取码: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: 1501connect-timeout: 601thumb-image:width: 150height: 150tracker-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 {@Autowiredprivate FastFileStorageClient storageClient;@Autowiredprivate ThumbImageConfig thumbImageConfig;@Testpublic 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());}@Testpublic 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

浏览器访问:

感谢各位的阅读,本教程结束,此教程为博主整理网络资料和实践后出的原创教程,转载请著名原著地址,感谢!
有什么不明白的和补充的欢迎留言。

非常详细的FastDFS整合springBoot教程-带文件下载地址相关推荐

  1. 【elasticsearch】elasticsearch教程 es整合springboot教程 kibana安装教程 解决kibana访问404

    文章目录 linux安装es springboot-data整合es kibana安装 es和kibana配置账号密码 es的账号密码设置 kibana的账号密码设置 es高阶 分片策略 推迟分片分配 ...

  2. FastDFS整合SpringBoot - 实现service

    <dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client&l ...

  3. 很详细的SpringBoot整合UEditor教程

    很详细的SpringBoot整合UEditor教程 2017年04月10日 20:27:21 小宝2333 阅读数:21529 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  4. springboot整合easypoi导入带图片excel并将图片上传到FastDFS服务器

    springboot整合easypoi导入带图片excel并将图片上传到FastDFS服务器 1.使用easypoi导入excel 链接: easypoi详细文档. 2.导入easypoi依赖,版本可 ...

  5. Eclipse中实现SpringBoot与Mybatis整合(图文教程带源码)

    场景 数据库中数据 实现效果 项目结构 前面参照 Eclipse中新建SpringBoot项目并输出HelloWorld https://blog.csdn.net/BADAO_LIUMANG_QIZ ...

  6. 详细SpringBoot教程之数据访问

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  7. 详细SpringBoot教程之缓存开发

    写在前面 这一系列的博文初步都定下来包括SpringBoot介绍.入门.配置.日志相关.web开发.数据访问.结合docker.缓存.消息队列.检索.任务安全.分布式等等一系列的博文,工作量很大,是个 ...

  8. 详细SpringBoot教程之入门(一)

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  9. 视频教程- 19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合-Java

    19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有nod ...

最新文章

  1. java 返回double数组_java-如何使用Collectors.averagingDouble计算双精度数组的均值?
  2. 把成员函数转换为函数的代码。
  3. js截屏 video_js获取video任意时间的画面截图
  4. L1-036. A乘以B
  5. 流量计算机标准,流量计算机
  6. java string类型_java中String类型
  7. 淡黄色电子书阅读器网站模板
  8. Python3.x+pycharm+Anaconda中缩小打包的.exe体积的方法
  9. mysql druid读写分离_springboot+mysql+jpa+sharding-jdbc+druid读写分离
  10. 64位和32位的区别
  11. 【图论】染色法判定二分图详解
  12. QPCore Service与NetAssist冲突解决
  13. 大气污染治理行业有哪些特点?
  14. ensp模拟器使用USG6000V防火墙模拟搭建点到点的IPSec 隧道(web网页版)
  15. 如何选择APP内测分发平台?五年开发者亲述
  16. Java实现图书管理小练习(赌包辣条看完绝对会~)
  17. 2020云盘点:云数据库冲击传统数据库,擦枪走火看金融
  18. 华为 android 菜单键,没有返回和菜单键!华为P10的Home键简单说明
  19. ## 7-7 大炮打蚊子 (15 分)
  20. iphone分辨率终极指南(含iphone6/6+)

热门文章

  1. 【干货】洋葱淘elya妞:电商小白产品操盘心得,洋葱淘如何搞到种子用户
  2. 2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解
  3. 凌晨3点不回家,你不要老婆孩子了?
  4. 微信小程序采坑四:下拉刷新不回弹
  5. R语言 类别数据可视化(1)
  6. Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程
  7. 操盘建议----全球顶尖交易员的成功实践和心路历程(三)
  8. 视频超分:SMFN(A Single Frame and Multi-Frame Joint Network for 360-degree Panorama Video Super-Resol...)
  9. glob.glob() 函数的使用方法,超级详细
  10. cef异常处理_cef2623程序在xp下无法启动 出现c06d007f异常的解决方法