本文源码:GitHub·点这里 || GitEE·点这里

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

二、与SpringBoot2整合

1、核心步骤

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

2、核心依赖

  1. <!-- FastDFS依赖 -->
  2. <dependency>
  3. <groupId>com.github.tobato</groupId>
  4. <artifactId>fastdfs-client</artifactId>
  5. <version>1.26.5</version>
  6. </dependency>
  7. <!-- Swagger2 核心依赖 -->
  8. <dependency>
  9. <groupId>io.springfox</groupId>
  10. <artifactId>springfox-swagger2</artifactId>
  11. <version>2.6.1</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>io.springfox</groupId>
  15. <artifactId>springfox-swagger-ui</artifactId>
  16. <version>2.6.1</version>
  17. </dependency>

3、配置FastDFS

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

2)文件工具类

  1. @Component
  2. public class FileDfsUtil {
  3. private static final Logger LOGGER = LoggerFactory.getLogger(FileDfsUtil.class);
  4. @Resource
  5. private FastFileStorageClient storageClient ;
  6. /**
  7. * 上传文件
  8. */
  9. public String upload(MultipartFile multipartFile) throws Exception{
  10. String originalFilename = multipartFile.getOriginalFilename().
  11. substring(multipartFile.getOriginalFilename().
  12. lastIndexOf(".") + 1);
  13. StorePath storePath = this.storageClient.uploadImageAndCrtThumbImage(
  14. multipartFile.getInputStream(),
  15. multipartFile.getSize(),originalFilename , null);
  16. return storePath.getFullPath() ;
  17. }
  18. /**
  19. * 删除文件
  20. */
  21. public void deleteFile(String fileUrl) {
  22. if (StringUtils.isEmpty(fileUrl)) {
  23. LOGGER.info("fileUrl == >>文件路径为空...");
  24. return;
  25. }
  26. try {
  27. StorePath storePath = StorePath.parseFromUrl(fileUrl);
  28. storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
  29. } catch (Exception e) {
  30. LOGGER.info(e.getMessage());
  31. }
  32. }
  33. }

4、文件上传配置

  1. spring:
  2. application:
  3. name: ware-fast-dfs
  4. servlet:
  5. multipart:
  6. enabled: true
  7. max-file-size: 10MB
  8. max-request-size: 20MB

5、配置Swagger2

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

1)配置代码类

  1. @Configuration
  2. public class SwaggerConfig {
  3. @Bean
  4. public Docket createRestApi() {
  5. return new Docket(DocumentationType.SWAGGER_2)
  6. .apiInfo(apiInfo())
  7. .select()
  8. .apis(RequestHandlerSelectors.basePackage("com.fast.dfs"))
  9. .paths(PathSelectors.any())
  10. .build();
  11. }
  12. private ApiInfo apiInfo() {
  13. return new ApiInfoBuilder()
  14. .title("SpringBoot利用Swagger构建API文档")
  15. .description("使用RestFul风格, 创建人:知了一笑")
  16. .termsOfServiceUrl("https://github.com/cicadasmile")
  17. .version("version 1.0")
  18. .build();
  19. }
  20. }

2)启动类注解

  1. @EnableSwagger2

三、演示案例

1、接口代码

  1. @RestController
  2. public class FileController {
  3. @Resource
  4. private FileDfsUtil fileDfsUtil ;
  5. /**
  6. * 文件上传
  7. */
  8. @ApiOperation(value="上传文件", notes="测试FastDFS文件上传")
  9. @RequestMapping(value = "/uploadFile",headers="content-type=multipart/form-data", method = RequestMethod.POST)
  10. public ResponseEntity<String> uploadFile (@RequestParam("file") MultipartFile file){
  11. String result ;
  12. try{
  13. String path = fileDfsUtil.upload(file) ;
  14. if (!StringUtils.isEmpty(path)){
  15. result = path ;
  16. } else {
  17. result = "上传失败" ;
  18. }
  19. } catch (Exception e){
  20. e.printStackTrace() ;
  21. result = "服务异常" ;
  22. }
  23. return ResponseEntity.ok(result);
  24. }
  25. /**
  26. * 文件删除
  27. */
  28. @RequestMapping(value = "/deleteByPath", method = RequestMethod.GET)
  29. public ResponseEntity<String> deleteByPath (){
  30. String filePathName = "group1/M00/00/00/wKhIgl0n4AKABxQEABhlMYw_3Lo825.png" ;
  31. fileDfsUtil.deleteFile(filePathName);
  32. return ResponseEntity.ok("SUCCESS") ;
  33. }
  34. }

2、执行流程

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

四、源代码地址

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

SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理的更多相关文章

  1. (十一)整合 FastDFS 中间件,实现文件分布式管理

    整合 FastDFS 中间件,实现文件分布式管理 1.FastDFS简介 1.1 核心角色 1.2 运转流程 2.SpringBoot整合FastDFS 2.1 核心步骤 2.2 核心依赖 2.3 配 ...

  2. SpringBoot2.0集成FastDFS

    SpringBoot2.0集成FastDFS 前两篇整体上介绍了通过 Nginx 和 FastDFS 的整合来实现文件服务器.但是,在实际开发中对图片或文件的操作都是通过应用程序来完成的,因此,本篇将 ...

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

    本文源码:GitHub·点这里 || GitEE·点这里 一.Redis集群简介 1.RedisCluster概念 Redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的 ...

  4. springboot2.0整合logback日志(详细)

    <div class="post"> <h1 class="postTitle"> springboot2.0整合logback日志(详 ...

  5. 第二篇:SpringBoot2.0整合ActiveMQ

    本篇开始将具体介绍SpringBoot如何整合其它项目. 如何创建SpringBoot项目 访问https://start.spring.io/. 依次选择构建工具Maven Project.语言ja ...

  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 整合 Dubbo框架 ,实现RPC服务远程调用

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

  9. SpringBoot2.0整合fastjson的正确姿势

            SpringBoot2.0如何集成fastjson?在网上查了一堆资料,但是各文章的说法不一,有些还是错的,可能只是简单测试一下就认为ok了,最后有没生效都不知道.恰逢公司项目需要将J ...

随机推荐

  1. C++类成员默认初始值

    有时候我们会不给C++类成员变量赋初始值,或是因为忘记在构造函数中指定(C++11可以写在类内),或是觉得没有必要写.然而,因为觉得编译器会把变量赋成0而不写是错误的.本文通过C++标准来解释这个问题 ...

  2. 天天动听API

    本次分析的是天天动听API,天天动听有一点比较好,就是搜索返回直接有歌曲播放的地址了,并且有无损的音频 搜索歌曲API:http://so.ard.iyyin.com/s/song_with_out? ...

  3. Wonder第一期3D引擎和编辑器线下培训班报名开始啦(免费学习)

    Wonder第一次举办 针对3D底层技术的 线下培训班,免费学习,请大家多多支持-感谢- 培训地点 成都 开课时间 报名满5人开课. 报名方式 加QQ群:732861508 备注请写:报名培训 老师介 ...

  4. Android 中 MessageQueue 的 nativePollOnce

    Android SDK 中的事件循环已经是一个老生常谈的问题了, 像 Handler Looper MessageQueue 这几个类也是被大家研究透彻了. 但是再回头看以前自己的分析, 总感觉差点什 ...

  5. 从无到有通过IDEA搭建SpringBoot项目

    本人第一次写博客希望记录当下,努力成为IT界中的清流,写的不好多多包涵. SpringBoot是由Pivotal团队在2013年开始研发.2014年4月发布第一个版本的全新开源的轻量级框架.它基于Sp ...

  6. mysql之行转列与列转行

    mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现. 行转列 行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作 ...

  7. Dubbo学习笔记-RPC扩展和本地Mock

    1.Dubbo介绍 Dubbo,一个是一款高性能Java RPC框架.私以为有中文官方文档,就不再重复介绍了 2.RPC扩展-本地存根stub RPC扩展功能:提前效验参数,缓存调用结果,日志记录等等 ...

  8. 破解另一家网站的反爬机制 & HMAC 算法

    零.写在前面 本文涉及的反爬技术,仅供个人技术学习,禁止并做到: 干扰被访问网站的正常运行 抓取受到法律保护的特定类型的数据或信息 搜集到的数据禁止传播.交给第三方使用.或者牟利 如有可能,在爬到数据 ...

  9. 自己封装Linux命令行万能解压命令

    问题背景 Linux下经常需要解压文件,直接在命令行敲命令解压是最便捷的. 但问题在于,不同的压缩格式,需要用不同命令和不同参数,完全记不住啊. 解决方式 既然记不住,那就换一种思路,假如有一条命令能 ...

  10. Python高级特性——迭代(Iteration)

    1.给定一个集合list或者tuple,可以通过for …… in ……的语法来实现循环遍历,这个循环我们就叫做迭代 迭代list: >>> m = ['haha','hehe',' ...