FastDFS是一款高性能的分布式文件系统。主要功能包括:文件存储,文件同步,文件访问(上传下载)。它可以解决高容量和负载均衡的问题。FastDFS适合用来做文件相关的网站,如图片分享、视频分享等。

FastDFS角色

FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

tracker server

跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

storage server

存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

client

客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

文件上传的内部机制

首先客户端请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求上传文件,存储服务器接收到请求后生产文件,并且将文件内容写入磁盘并返回给客户端file_id、路径信息、文件名等信息,客户端保存相关信息上传完毕。

SpringBoot搭建FastDFS

pom文件

    <dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.1-RELEASE</version></dependency>

配置类

@Component
public class FdfsConfig {@Value("${fdfs.resHost}")
private String resHost;@Value("${fdfs.storagePort}")
private String storagePort;
// 省略setget方法
}

上传方法

/*** MultipartFile类型的文件上传ַ* @param file* @return* @throws IOException*/public String uploadFile(MultipartFile file) throws IOException {StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),FilenameUtils.getExtension(file.getOriginalFilename()), null);return getResAccessUrl(storePath);
}

删除文件方法

/*** 删除文件* @param fileUrl*/public void deleteFile(String fileUrl) {if (StringUtils.isEmpty(fileUrl)) {return;}try {StorePath storePath = StorePath.praseFromUrl(fileUrl);storageClient.deleteFile(storePath.getGroup(), storePath.getPath());} catch (FdfsUnsupportStorePathException e) {      logger.warn(e.getMessage());}
}

FileController

 1 @Controller2public class FileController {3@Autowired4private CommonFileUtil fileUtil;56@Autowired7private FdfsConfig fdfsConfig;89private final static Logger logger = LoggerFactory.getLogger(FileController.class);
10
11// 跳转上传页面
12@RequestMapping("/goIndex")
13public String goIndex(){
14    logger.info("进入主页面");
15    return "/file";
16}
17
18// 使用fastdfs进行文件上传
19@RequestMapping("/uploadFileToFast")
20public String uoloadFileToFast(@RequestParam("fileName")MultipartFile file, RedirectAttributes attributes) throws IOException{
21
22    if(file.isEmpty()){
23        logger.info("文件不存在");
24    }
25    String path = fileUtil.uploadFile(file);
26    String url = fdfsConfig.getResHost()+path;
27    attributes.addAttribute("url", url);
28    return "redirect:/success";
29}
30
31// 跳转成功页面
32@RequestMapping("/success")
33public String success(HttpServletRequest request){
34    request.setAttribute("imgUrl", request.getParameter("url"));
35    logger.info(request.getParameter("url"));
36    logger.info("进入上传成功页面");
37    return "/success";
38}
39
40}

测试结果返回文件的路径,需要再加上url地址即可查看文件。

group1/M00/00/00/rBFikVzWXtOAZD4bAAA0EWRB2Io412.png

SpringBoot 集成FastDFS搭建完成。

源码在这里GitHub:github源码

SpringBoot集成FastDFS相关推荐

  1. SpringBoot集成FastDFS依赖实现文件上传

    前言 对FastDFS文件系统安装后的使用. FastDFS的安装请参考这篇:https://www.cnblogs.com/niceyoo/p/13511082.html 本文环境:IDEA + J ...

  2. SpringBoot集成FastDFS的配合

    最近做的项目需要把相关的录音文件上传到FastDFS服务器,因为之前没有做过,所以都是在网上找一些资源做参考,最后经过调试,终于可以上传成功了,接下来我来和大家分享我写的相关代码,其他就不讲解了,希望 ...

  3. springboot(十八):使用Spring Boot集成FastDFS

    上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中. 这个项目会在上一个项目的基础上进行构建. 1.pom包 ...

  4. (转)Spring Boot(十八):使用 Spring Boot 集成 FastDFS

    http://www.ityouknow.com/springboot/2018/01/16/spring-boot-fastdfs.html 上篇文章介绍了如何使用 Spring Boot 上传文件 ...

  5. Nignx集成fastDFS后访问Nginx一直在加载中解决

    问题描述: Nginx集成fastDFS后,访问Nginx一直在加载中,得不到页面.查看Nginx的错误日志: 可以看到是fastdfs.conf的配置错误,tracker的ip没有修改: fastd ...

  6. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

  7. SpringBoot集成FreeMarker

    给大家简单介绍一下springboot 集成FreeMarker 过程很简单,5分钟即可. 首先在项目中增添依赖spring-boot-starter-freemarker pom文件代码如下: &l ...

  8. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  9. springboot 集成logback

    springboot 集成logback 1.application.properties配置文件指定logback.xml logging.config=classpath:logback.xml ...

最新文章

  1. 粒子耗尽 粒子滤波_如何使用粒子的强大蓝牙API
  2. 【学习笔记】供应链金融简介(精华)
  3. 获得 DataSet中的记录总数
  4. tail -f 不断刷新
  5. linux的django路径,Ubuntu下使用Django搭建前后端分离的全栈项目
  6. JS 删除 cookie
  7. 某剧院有33排座位java_2018湖南省考行测数学题“拍档”:等差数列和等比数列...
  8. 用计算机探索规律反思,用计算器探索规律教学反思
  9. 最长路径算法 c语言_「算法」求二叉树的最长同值路径
  10. Django基础之wsgi
  11. keil spi 调试_单片机软件出问题了?有经验的工程师这么调试
  12. 成为一名优秀架构师有标准吗?这12点或许能带给你一些启发
  13. php搜索功能代码实列,php记录搜索引擎关键词的代码示例
  14. [c++primer][05]表达式
  15. [面试必考]OSI 网络七层协议以及各层的功能
  16. linux查看串口信息tty*
  17. calcHist的使用
  18. linux网卡slave状态,生产环境中linux bonding 主备模式slave网卡切换的方法
  19. Vue轮子-Lottie-动画实现
  20. oracle9i如何建表,oracle9i命令(一):手工创建数据库

热门文章

  1. 分区命令Parted详解
  2. 用Python买双色球,赢取1千万!
  3. MODELISM 仿真遇到glbl问题
  4. 数组的flat方法【Array.prototype.flat()】
  5. 红米设备怎么样无需ROOT激活Xposed框架的教程
  6. 我又发现了这几个让人耳目一新的小众App
  7. 【ML算法学习】子空间不一致度量(SDM)、测地线流核(GFK)及域排名(ROD)
  8. <ctime>, clock()
  9. 虚拟机Ubuntu系统改变中文与Windows系统共享文件到安装pycharm学习MySQL数据库
  10. Spring Security 框架学习之十二 单点登录原理(部分注解是我原创,其余是转载网上电子书内容,献丑了,写的不对请大家见谅,如有侵权我立即删除)(主要是为了自己学的知识备忘)