点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!

首先说一下从零开始自己去搭一个fastdfs挺麻烦,后来看到有人把做好的 docker 镜像传出来了,那搭建起来就很容易了

有服务器的可以自己在服务器上玩玩,没有的可以新建一个centos7.5虚拟机玩玩,遇到虚拟机不能上网和换阿里云的源的问题可以参考https://blog.csdn.net/qq_37759106/article/details/82985113这篇文章

PS:更多 Docker 和 Spring Boot 的文章可以关注微信公众号「Java后端」回复「666」下载技术栈手册。

1.第一步安装docker:

 在 root 权限下

yum install -y docker-io #安装docker
service docker star #启动docker
docker -v # 查看docker版本

2. 拉取镜像

docker pull qbanxiaoli/fastdfs

启动 fastdfs

docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=192.168.127.131 -e WEB_PORT=80 -v ${HOME}/fastdfs:/var/local/fdfs qbanxiaoli/fastdfs
IP 后面是你的服务器公网ip或者虚拟机的IP,-e WEB_PORT=80 指定 nginx 端口

测试fastdfs是否搭建成功

docker exec -it fastdfs /bin/bash
echo "Hello FastDFS!">index.html
fdfs_test /etc/fdfs/client.conf upload index.html

能返回 url 就意见搭建成功

这样 fastdfs 就搭建好啦

下面进入 Spring Boot 整合部分

<groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId>
<version>1.26.2</version>

在 Spring Boot 启动类上加

@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)

创建FastDFSClient工具类

package com.yd.client.common;import com.github.tobato.fastdfs.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.*;@Component
public class FastDFSClient {private static Logger log =LoggerFactory.getLogger(FastDFSClient.class);private static FastFileStorageClient fastFileStorageClient;private static FdfsWebServer fdfsWebServer;@Autowiredpublic void setFastDFSClient(FastFileStorageClient fastFileStorageClient, FdfsWebServer fdfsWebServer) {FastDFSClient.fastFileStorageClient = fastFileStorageClient;FastDFSClient.fdfsWebServer = fdfsWebServer;}/*** @param multipartFile 文件对象* @return 返回文件地址* @author qbanxiaoli* @description 上传文件*/public static String uploadFile(MultipartFile multipartFile) {try {StorePath storePath = fastFileStorageClient.uploadFile(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);return storePath.getFullPath();} catch (IOException e) {log.error(e.getMessage());return null;}}/*** @param multipartFile 图片对象* @return 返回图片地址* @author qbanxiaoli* @description 上传缩略图*/public static String uploadImageAndCrtThumbImage(MultipartFile multipartFile) {try {StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(multipartFile.getInputStream(), multipartFile.getSize(), FilenameUtils.getExtension(multipartFile.getOriginalFilename()), null);return storePath.getFullPath();} catch (Exception e) {log.error(e.getMessage());return null;}}/*** @param file 文件对象* @return 返回文件地址* @author qbanxiaoli* @description 上传文件*/public static String uploadFile(File file) {try {FileInputStream inputStream = new FileInputStream(file);StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);return storePath.getFullPath();} catch (Exception e) {log.error(e.getMessage());return null;}}/*** @param file 图片对象* @return 返回图片地址* @author qbanxiaoli* @description 上传缩略图*/public static String uploadImageAndCrtThumbImage(File file) {try {FileInputStream inputStream = new FileInputStream(file);StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);return storePath.getFullPath();} catch (Exception e) {log.error(e.getMessage());return null;}}/*** @param bytes byte数组* @param fileExtension 文件扩展名* @return 返回文件地址* @author qbanxiaoli* @description 将byte数组生成一个文件上传*/public static String uploadFile(byte[] bytes, String fileExtension) {ByteArrayInputStream stream = new ByteArrayInputStream(bytes);StorePath storePath = fastFileStorageClient.uploadFile(stream, bytes.length, fileExtension, null);return storePath.getFullPath();}/*** @param fileUrl 文件访问地址* @param file 文件保存路径* @author qbanxiaoli* @description 下载文件*/public static boolean downloadFile(String fileUrl, File file) {try {StorePath storePath = StorePath.praseFromUrl(fileUrl);byte[] bytes = fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray());FileOutputStream stream = new FileOutputStream(file);stream.write(bytes);} catch (Exception e) {log.error(e.getMessage());return false;}return true;}/*** @param fileUrl 文件访问地址* @author qbanxiaoli* @description 删除文件*/public static boolean deleteFile(String fileUrl) {if (StringUtils.isEmpty(fileUrl)) {return false;}try {StorePath storePath = StorePath.praseFromUrl(fileUrl);fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath());} catch (Exception e) {log.error(e.getMessage());return false;}return true;}// 封装文件完整URL地址public static String getResAccessUrl(String path) {String url = fdfsWebServer.getWebServerUrl() + path;log.info("上传文件地址为:\n" + url);return url;}}

配置yml文件

# 分布式文件系统fastdfs配置
fdfs:# socket连接超时时长soTimeout: 1500# 连接tracker服务器超时时长connectTimeout: 600pool:# 从池中借出的对象的最大数目max-total: 153# 获取连接时的最大等待毫秒数100max-wait-millis: 102# 缩略图生成参数,可选thumbImage:width: 150height: 150# 跟踪服务器tracker_server请求地址,支持多个,这里只有一个,如果有多个在下方加- x.x.x.x:porttrackerList:- 192.168.127.131:22122## 存储服务器storage_server访问地址web-server-url: http://192.168.127.131/spring:http:multipart:max-file-size: 100MB # 最大支持文件大小max-request-size: 100MB # 最大支持请求大小
测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class FileClientApplicationTests {@Testpublic void Upload() {String fileUrl = this.getClass().getResource("/test.jpg").getPath();File file = new File(fileUrl);String str = FastDFSClient.uploadFile(file);FastDFSClient.getResAccessUrl(str);}@Testpublic void Delete() {FastDFSClient.deleteFile("group1/M00/00/00/rBEAClu8OiSAFbN_AAbhXQnXzvw031.jpg");}
}

运行测试类

返回的 url 就是能访问的地址

作者:kalibiubiubiu

blog.csdn.net/qq_37759106/article/details/82981023

热门内容:955 不加班的公司名单:955.WLB工作 4 年,从阿里巴巴辞职到了国企
百度最近开源了分布式配置中心,名叫BRCC最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

Docker + FastDFS + Spring Boot 一键式搭建分布式文件服务器相关推荐

  1. docker环境下docker-compose一键式搭建skywalking链路追踪服务

    前言 本节内容我们使用docker-compose一键式搭建一套skywalking链路追踪服务,实现docker环境下的微服务链路追踪监控,在开始本节内容之前,我们需要提前安装好docker和doc ...

  2. 【站在微笑的肩上】Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    文章目录 前言 原文章 1. 一个简单 Spring Boot 项目 2. Spring Boot 项目添加 Docker 支持 3. 构建打包环境 3.1 安装 Docker 环境 3.2 安装JD ...

  3. Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  4. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  5. (转)Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏

    http://www.ityouknow.com/springboot/2018/04/02/docker-favorites.html 云收藏项目已经开源2年多了,作为当初刚开始学习 Spring ...

  6. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...

  7. Spring Boot 2.0:Docker Compose + Spring Boot + Nginx + Mysql 实践

    Spring Boot 2.0:Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中最常 ...

  8. 使用 Docker 部署 Spring Boot

    使用 Docker 部署 Spring Boot Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. ...

  9. 快速使用 Docker 部署 Spring Boot 项目

    如今 Docker 的使用已经非常普遍,特别是在一线互联网公司,使用 Docker 技术可以帮助企业快速水平扩展服务,从而达到弹性部署业务的能力.在云服务概念兴起之后,Docker 的使用场景和范围进 ...

最新文章

  1. 今日 Paper | 多人姿势估计;对话框语义分析;无监督语义分析;自然语言处理工具包等
  2. linux修改ssh端口
  3. 条件随机场CRF HMM,MEMM的区别
  4. jq localStorage
  5. 目前人工智能的主要研究方向是哪些?
  6. 【转载】PHP.INI配置:Session配置详细说明教程
  7. 149.直线上最多的点数
  8. Orcad Library Builder使用教程以及安装踩坑记录
  9. 软设考点精要,精确到每页!
  10. Robo 3T使用教程--MongoDB篇(极简)
  11. python(3):文件操作/os库
  12. php身份证实名认证接口
  13. 小胡学python【2】
  14. Gym 101778G
  15. js 获取指定日期的前几天日期或后几天日期
  16. Excel表格之道 学习笔记(二)
  17. pyscripter支持python什么版本_PyScripter在Windows上具有多个Python版本
  18. ssm基于微信小程序的游泳馆管理系统 uinapp 计算机毕业设计
  19. 计算机算法设计与分析(第五版)---王晓冬--------前六章(递归与分治,动态规划,贪心算法,回溯法,)期末复习资料总结
  20. MySQL的存储过程你了解吗?来看这篇文章,保证你不会后悔!

热门文章

  1. 2018/5/1-----1987年图灵奖PPT
  2. Git 版本还原命令
  3. YII2 models非常好用的控制输出数据【重写Fields】
  4. ehcache导致Tomcat重启出错
  5. Win7下使用Putty代替超级终端通过COM串口连接开发板方法
  6. ES5 数组方法forEach
  7. Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)
  8. 【青少年编程】【二级】绘制图形
  9. LeetCode实战:合并K个排序链表
  10. Matlab数据的可视化 -- 简易线性函数图