SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理
一、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
- 核心配置文件
fdfs:# 链接超时connect-timeout: 60# 读取时间so-timeout: 60# 生成缩略图参数thumb-image:width: 150height: 150tracker-list: 192.168.72.130:22122
- 核心配置类
@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 中间件,实现文件分布式管理相关推荐
- SpringBoot2.0整合Redis实战
SpringBoot2.x整合Redis实战 1.分布式缓存Redis介绍 简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具 1.redis官网 https://redis.io/down ...
- SpringBoot2.0 整合 Redis集群 ,实现消息队列场景
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 一.Redis集群简介 1.RedisCluster概念 Re ...
- SpringBoot2.0整合多数据源拆分
前言 本文环境承接springboot2.0整合使用mybatis(数据访问篇) 一.什么是多数据源 公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库垂直业务数据库.垂直根据业务划分具体 ...
- SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题
SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...
- SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用
一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层 ...
- SpringBoot2.0 整合 QuartJob ,实现定时器实时管理
一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...
- SpringBoot2.0 整合 Swagger2 ,构建接口管理界面
一.Swagger2简介 1.Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档.省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试 ...
- SpringBoot2.0整合SpringCache和Redis(lettuce)攻略
Redis Redis 是一个高性能的key-value数据库,广泛应用于互联网业务的缓存,如token池,商品缓存等等热点数据的缓存. linux原版官方地址 http://redis.io win ...
- SpringCloud、SpringBoot2.0 整合Oauth2 (四) 配置文件快速配置url过滤
SpringBoot2.0 整合Oauth2 (四) 配置文件快速配置url过滤 文章目录 SpringBoot2.0 整合Oauth2 (四) 配置文件快速配置url过滤 1.添加url过滤配置 2 ...
最新文章
- python 命令-Django 基本命令
- 算法知识点总结——算法分析基础
- 13个圆可以画什么?数学与艺术完美邂逅!原来数学也可以这么美
- 2021快手美妆行业数据营销报告
- java gps 距离计算_Java教程之地图中计算两个GPS坐标点的距离
- 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) 题解
- 类库、框架、模块、组件等概念介绍
- java判断一个数是不是素数_Java-判断一个数是不是素数
- 深信服php面经,深信服面经
- window 64/32 安装配置 eclipse+jdk+mysql+tomcat+maven
- SPSS实现系统聚类
- 简述下列​概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构
- echarst环形进度,官网https://echarts.apache.org/examples/zh/index.html
- Java 10正式发布,带来了这些新特性
- 【每周一篇】推荐算法之威尔逊区间法
- 开车的极限速度速速体验刺激瞬间!!!
- CSS 样式表大全(学习笔记)
- 解读领跑全国的区块链发展“北京方案”:设专项基金,构建开源生态
- 零基础学SQL(十三、事务)
- 网络 计算机 有时无法发现,win7电脑无法启用网络发现怎么解决?
热门文章
- (王道408考研数据结构)第三章栈和队列-第二节:队列基本概念、顺序栈和链栈基本操作
- 3-5:类与对象中篇——默认成员函数之运算符重载
- libevent evhttp学习——http客户端
- C++11 并发指南五(std::condition_variable 详解)
- USACO-Section2.1 Hamming Codes(深度优先搜索)
- Linux C 存储映射IO
- docker常用参数详解,docker run常用参数详解(精)
- 手眼标定eye-to-hand 示例:handeye_stationarycam_calibration
- Kaggle 数据挖掘比赛经验分享(转)
- 每天至少保证4个小时的学习时间