上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中。

这个项目会在上一个项目的基础上进行构建。

1、pom包配置

我们使用Spring Boot最新版本1.5.9、jdk使用1.8、tomcat8.0。

<dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27-SNAPSHOT</version>
</dependency>

加入了fastdfs-client-java包,用来调用FastDFS相关的API。

2、配置文件

resources目录下添加fdfs_client.conf文件

connect_timeout = 60
network_timeout = 60
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = 123456tracker_server = 192.168.53.85:22122
tracker_server = 192.168.53.86:22122

配置文件设置了连接的超时时间,编码格式以及tracker_server地址等信息

详细内容参考:fastdfs-client-java

3、封装FastDFS上传工具类

封装FastDFSFile,文件基础信息包括文件名、内容、文件类型、作者等。

public class FastDFSFile {private String name;private byte[] content;private String ext;private String md5;private String author;//省略getter、setter

封装FastDFSClient类,包含常用的上传、下载、删除等方法。

首先在类加载的时候读取相应的配置信息,并进行初始化。

static {try {String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;ClientGlobal.init(filePath);trackerClient = new TrackerClient();trackerServer = trackerClient.getConnection();storageServer = trackerClient.getStoreStorage(trackerServer);} catch (Exception e) {logger.error("FastDFS Client Init Fail!",e);}
}

文件上传

public static String[] upload(FastDFSFile file) {logger.info("File Name: " + file.getName() + "File Length:" + file.getContent().length);NameValuePair[] meta_list = new NameValuePair[1];meta_list[0] = new NameValuePair("author", file.getAuthor());long startTime = System.currentTimeMillis();String[] uploadResults = null;try {storageClient = new StorageClient(trackerServer, storageServer);uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);} catch (IOException e) {logger.error("IO Exception when uploadind the file:" + file.getName(), e);} catch (Exception e) {logger.error("Non IO Exception when uploadind the file:" + file.getName(), e);}logger.info("upload_file time used:" + (System.currentTimeMillis() - startTime) + " ms");if (uploadResults == null) {logger.error("upload file fail, error code:" + storageClient.getErrorCode());}String groupName = uploadResults[0];String remoteFileName = uploadResults[1];logger.info("upload file successfully!!!" + "group_name:" + groupName + ", remoteFileName:" + " " + remoteFileName);return uploadResults;
}

使用FastDFS提供的客户端storageClient来进行文件上传,最后将上传结果返回。

根据groupName和文件名获取文件信息。

public static FileInfo getFile(String groupName, String remoteFileName) {try {storageClient = new StorageClient(trackerServer, storageServer);return storageClient.get_file_info(groupName, remoteFileName);} catch (IOException e) {logger.error("IO Exception: Get File from Fast DFS failed", e);} catch (Exception e) {logger.error("Non IO Exception: Get File from Fast DFS failed", e);}return null;
}

下载文件

public static InputStream downFile(String groupName, String remoteFileName) {try {storageClient = new StorageClient(trackerServer, storageServer);byte[] fileByte = storageClient.download_file(groupName, remoteFileName);InputStream ins = new ByteArrayInputStream(fileByte);return ins;} catch (IOException e) {logger.error("IO Exception: Get File from Fast DFS failed", e);} catch (Exception e) {logger.error("Non IO Exception: Get File from Fast DFS failed", e);}return null;
}

删除文件

public static void deleteFile(String groupName, String remoteFileName)throws Exception {storageClient = new StorageClient(trackerServer, storageServer);int i = storageClient.delete_file(groupName, remoteFileName);logger.info("delete file successfully!!!" + i);
}

使用FastDFS时,直接调用FastDFSClient对应的方法即可。

4、编写上传控制类

从MultipartFile中读取文件信息,然后使用FastDFSClient将文件上传到FastDFS集群中。

public String saveFile(MultipartFile multipartFile) throws IOException {String[] fileAbsolutePath={};String fileName=multipartFile.getOriginalFilename();String ext = fileName.substring(fileName.lastIndexOf(".") + 1);byte[] file_buff = null;InputStream inputStream=multipartFile.getInputStream();if(inputStream!=null){int len1 = inputStream.available();file_buff = new byte[len1];inputStream.read(file_buff);}inputStream.close();FastDFSFile file = new FastDFSFile(fileName, file_buff, ext);try {fileAbsolutePath = FastDFSClient.upload(file);  //upload to fastdfs} catch (Exception e) {logger.error("upload file Exception!",e);}if (fileAbsolutePath==null) {logger.error("upload file failed,please upload again!");}String path=FastDFSClient.getTrackerUrl()+fileAbsolutePath[0]+ "/"+fileAbsolutePath[1];return path;
}

请求控制,调用上面方法saveFile()

@PostMapping("/upload") //new annotation since 4.3
public String singleFileUpload(@RequestParam("file") MultipartFile file,RedirectAttributes redirectAttributes) {if (file.isEmpty()) {redirectAttributes.addFlashAttribute("message", "Please select a file to upload");return "redirect:uploadStatus";}try {// Get the file and save it somewhereString path=saveFile(file);redirectAttributes.addFlashAttribute("message","You successfully uploaded '" + file.getOriginalFilename() + "'");redirectAttributes.addFlashAttribute("path","file path url '" + path + "'");} catch (Exception e) {logger.error("upload file failed",e);}return "redirect:/uploadStatus";
}

上传成功之后,将文件的路径展示到页面,效果图如下:

在浏览器中访问此Url,可以看到成功通过FastDFS展示:

这样使用Spring Boot 集成FastDFS的案例就完成了。

示例代码-github

示例代码-码云

作者:纯洁的微笑
出处:www.ityouknow.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文如对您有帮助,还请多帮 【推荐】 下此文。
如果喜欢我的文章,请关注我的公众号

springboot(十八):使用Spring Boot集成FastDFS相关推荐

  1. SpringBoot2.x系列教程(四十八)Spring Boot集成JDBCTemplate

    JDBCTemplate相对于其他ORM框架来说是极其简单和极容易上手的一个数据库连接的封装.在学习JDBCTemplate之前,我们先来了解一下JDBC相关的概念和操作. JDBC简介 Java数据 ...

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

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

  3. Spring Boot教程(十六):Spring Boot集成shiro

    Apache Shiro™是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理.借助Shiro易于理解的API,您可以快速轻松地保护任何应用程序 - 从最小的移动应用程序到 ...

  4. SpringBoot2.x系列教程(四十五)Spring Boot集成WebSocket实现技术交流群功能

    在上篇文章中,我们了解了WebSocket的基本功能及相关概念.本篇文章中我们以具体的实例来演示,在Spring Boot中整合WebSocket,同时实现一个场景的业务场景功能. 针对在Spring ...

  5. (转)Spring Boot 2 (八):Spring Boot 集成 Memcached

    http://www.ityouknow.com/springboot/2018/09/01/spring-boot-memcached.html Memcached 介绍 Memcached 是一个 ...

  6. fastdfs删除过期文件_Spring Boot 系列:使用 Spring Boot 集成 FastDFS

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

  7. 学习Spring Boot:(十八)Spring Boot 中session共享

    前言 前面我们将 Redis 集成到工程中来了,现在需要用它来做点实事了.这次为了解决分布式系统中的 session 共享的问题,将 session 托管到 Redis. 正文 引入依赖 除了上篇文章 ...

  8. SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计

    加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...

  9. ideal新建springboot工程_MyBatis初级实战之一:Spring Boot集成

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

最新文章

  1. android Canvas 最基础知识总结
  2. 经典面试题: 为啥 ConcurrentHashMap 读操作不需要加锁?
  3. 大江大海2018: 冲浪科技之巅不可错过的十大数字前沿趋势
  4. MySQL索引管理及执行计划
  5. 用逻辑回归模型解决互联网金融信用风险问题
  6. Linux id指令
  7. 集合差异比较算法及性能测试
  8. 常见经典排序算法学习总结(插入、shell、冒泡、选择、归并、快排等)
  9. 火车头翻译-火车头采集翻译插件使用教程【2022】
  10. 2018/7/9日~年中总结
  11. 不做“OUTMAN”!笔记本热门词汇盘点
  12. 为virtools写的插件进行一下总结
  13. ERROR 1396 (HY000): Operation CREATE USER failed for ‘xxx‘@‘%‘
  14. 一步搞定无法审查元素
  15. 视频教程-Javascript DOM操作-JavaScript
  16. 【EI快速高录用】这可能是近2年发表SCI论文的最好机会!
  17. Maven升级3.8.1后maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories
  18. phpstorm 设置等号对齐
  19. c语言程序设计第五版实验报告九,C语言程序设计实验报告-实验九.doc
  20. MBD-PMSM闭环控制模型(FOC算法)

热门文章

  1. linux系统下如何github,Linux系统下如何安装和使用GitHub
  2. webhook自定义服务器,GO 使用Webhook 实现github 自动化部署
  3. 单片机at指令解析 开源_分享Github上几个开源单片机硬件驱动库
  4. java repaint_java repaint()无效
  5. python括号匹配算法_使用Python的栈实现括号匹配算法
  6. m4a录音文件损坏修复_智慧输入再升级 搜狗输入法创新推出AI录音助手功能
  7. shell 引号 解析 逗号_关于shell的单引号和双引号转义 以及特殊符号相关
  8. 写给第十七届,来自十六届的感想与建议
  9. 2021年春季学期-信号与系统-第八次作业参考答案-第十二小题
  10. 波形的转换与信号处理