一、FastDFS简介

1、FastDFS作用

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件上传、文件下载等,解决了大容量存储和负载均衡的问题。

安装连接:

安装流程详解

2、核心角色

FastDFS是由跟踪服务器(trackerserver)、存储服务器(storageserver)和客户端(client)三个部分组成。

1)跟踪服务器

FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group到[storage server list]的映射表。

2)存储服务器

以组(group)为单位,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

3)客户端

业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

3、运转流程

1、存储服务定时向跟踪服务上传状态信息;
2、客户端发起请求;
3、跟踪器同步存储器状态,返回存储服务端口和IP;
4、客户端执行文件操作(上传,下载)等。

二、与SpringBoot2整合

1、核心步骤

1)、配置FastDFS执行环境
2)、文件上传配置
3)、整合Swagger2测试接口

2、核心依赖

<!-- FastDFS依赖 -->
<dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.5</version>
</dependency>
<!-- Swagger2 核心依赖 -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.6.1</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.6.1</version>
</dependency>

3、配置FastDFS

  1. 核心配置文件
fdfs:# 链接超时connect-timeout: 60# 读取时间so-timeout: 60# 生成缩略图参数thumb-image:width: 150height: 150tracker-list: 192.168.72.130:22122
  1. 核心配置类
@Configuration
@Import(FdfsClientConfig.class)
// Jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class DfsConfig {
}

2)文件工具类

@Component
public class FileDfsUtil {private static final Logger LOGGER = LoggerFactory.getLogger(FileDfsUtil.class);@Resourceprivate FastFileStorageClient storageClient ;/*** 上传文件*/public String upload(MultipartFile multipartFile) throws Exception{String originalFilename = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".") + 1);StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(multipartFile.getInputStream(),multipartFile.getSize(),originalFilename , null);return storePath.getFullPath() ;}/*** 删除文件*/public void deleteFile(String fileUrl) {if (StringUtils.isEmpty(fileUrl)) {LOGGER.info("fileUrl == >>文件路径为空...");return;}try {StorePath storePath = StorePath.parseFromUrl(fileUrl);storageClient.deleteFile(storePath.getGroup(), storePath.getPath());} catch (Exception e) {LOGGER.info(e.getMessage());}}
}

4、文件上传配置

spring:application:name: ware-fast-dfsservlet:multipart:enabled: truemax-file-size: 10MBmax-request-size: 20MB

5、配置Swagger2

主要用来生成文件上传的测试界面。

1)配置代码类

@Configuration
public class SwaggerConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.fast.dfs")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("SpringBoot利用Swagger构建API文档").description("使用RestFul风格, 创建人:知了一笑").termsOfServiceUrl("https://github.com/cicadasmile").version("version 1.0").build();}
}

2)启动类注解

@EnableSwagger2

三、演示案例

1、接口代码

@RestController
public class FileController {@Resourceprivate FileDfsUtil fileDfsUtil ;/*** 文件上传*/@ApiOperation(value="上传文件", notes="测试FastDFS文件上传")@RequestMapping(value = "/uploadFile",headers="content-type=multipart/form-data", method = RequestMethod.POST)public ResponseEntity<String> uploadFile (@RequestParam("file") MultipartFile file){String result ;try{String path = fileDfsUtil.upload(file) ;if (!StringUtils.isEmpty(path)){result = path ;} else {result = "上传失败" ;}} catch (Exception e){e.printStackTrace() ;result = "服务异常" ;}return ResponseEntity.ok(result);}/*** 文件删除*/@RequestMapping(value = "/deleteByPath", method = RequestMethod.GET)public ResponseEntity<String> deleteByPath (){String filePathName = "group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png" ;fileDfsUtil.deleteFile(filePathName);return ResponseEntity.ok("SUCCESS") ;}
}

2、执行流程

1、访问http://localhost:7010/swagger-ui.html测试界面
2、调用文件上传接口,拿到文件在FastDFS服务的路径
3、浏览器访问:http://192.168.72.130/group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png
4、调用删除接口,删除服务器上图片
5、清空浏览器缓存,再次访问图片Url,回返回404

四、源代码地址

GitHub地址:知了一笑
https://github.com/cicadasmile/middle-ware-parent
码云地址:知了一笑
https://gitee.com/cicadasmile/middle-ware-parent


SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理相关推荐

  1. SpringBoot2.0整合Redis实战

    SpringBoot2.x整合Redis实战 1.分布式缓存Redis介绍 简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具 1.redis官网 https://redis.io/down ...

  2. SpringBoot2.0 整合 Redis集群 ,实现消息队列场景

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 一.Redis集群简介 1.RedisCluster概念 Re ...

  3. SpringBoot2.0整合多数据源拆分

    前言 本文环境承接springboot2.0整合使用mybatis(数据访问篇) 一.什么是多数据源 公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库垂直业务数据库.垂直根据业务划分具体 ...

  4. SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题

    SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...

  5. SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用

    一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层 ...

  6. SpringBoot2.0 整合 QuartJob ,实现定时器实时管理

    一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...

  7. SpringBoot2.0 整合 Swagger2 ,构建接口管理界面

    一.Swagger2简介 1.Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档.省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试 ...

  8. SpringBoot2.0整合SpringCache和Redis(lettuce)攻略

    Redis Redis 是一个高性能的key-value数据库,广泛应用于互联网业务的缓存,如token池,商品缓存等等热点数据的缓存. linux原版官方地址 http://redis.io win ...

  9. SpringCloud、SpringBoot2.0 整合Oauth2 (四) 配置文件快速配置url过滤

    SpringBoot2.0 整合Oauth2 (四) 配置文件快速配置url过滤 文章目录 SpringBoot2.0 整合Oauth2 (四) 配置文件快速配置url过滤 1.添加url过滤配置 2 ...

最新文章

  1. python 命令-Django 基本命令
  2. 算法知识点总结——算法分析基础
  3. 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美
  4. 2021快手美妆行业数据营销报告
  5. java gps 距离计算_Java教程之地图中计算两个GPS坐标点的距离
  6. 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) 题解
  7. 类库、框架、模块、组件等概念介绍
  8. java判断一个数是不是素数_Java-判断一个数是不是素数
  9. 深信服php面经,深信服面经
  10. window 64/32 安装配置 eclipse+jdk+mysql+tomcat+maven
  11. SPSS实现系统聚类
  12. 简述下列​概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构
  13. echarst环形进度,官网https://echarts.apache.org/examples/zh/index.html
  14. Java 10正式发布,带来了这些新特性
  15. 【每周一篇】推荐算法之威尔逊区间法
  16. 开车的极限速度速速体验刺激瞬间!!!
  17. CSS 样式表大全(学习笔记)
  18. 解读领跑全国的区块链发展“北京方案”:设专项基金,构建开源生态
  19. 零基础学SQL(十三、事务)
  20. 网络 计算机 有时无法发现,win7电脑无法启用网络发现怎么解决?

热门文章

  1. (王道408考研数据结构)第三章栈和队列-第二节:队列基本概念、顺序栈和链栈基本操作
  2. 3-5:类与对象中篇——默认成员函数之运算符重载
  3. libevent evhttp学习——http客户端
  4. C++11 并发指南五(std::condition_variable 详解)
  5. USACO-Section2.1 Hamming Codes(深度优先搜索)
  6. Linux C 存储映射IO
  7. docker常用参数详解,docker run常用参数详解(精)
  8. 手眼标定eye-to-hand 示例:handeye_stationarycam_calibration
  9. Kaggle 数据挖掘比赛经验分享(转)
  10. 每天至少保证4个小时的学习时间