作者:kalibiubiubiu

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

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

有服务器的可以自己在服务器上玩玩,没有的可以新建一个centos7.5虚拟机玩玩,遇到虚拟机不能上网和换阿里云的源的问题可以参考:

https://blog.csdn.net/qq_37759106/article/details/82985113

1.第一步安装docker:

在root权限下

yum install -y docker-io #安装dockerservice docker star #启动dockerdocker -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/bashecho "Hello FastDFS!">index.htmlfdfs_test /etc/fdfs/client.conf upload index.html

能返回url就意见搭建成功

这样fastdfs就搭建好啦

下面进入springboot整合部分

加入依赖

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

在springboot启动类上加

@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就是能访问的地址

最后一张看效果

END

推荐好文

强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮!

Docker+FastDFS+SpringBoot 快速搭建分布式文件服务器相关推荐

  1. 通过Docker或虚拟机快速搭建私有云平台--使用Nextcloud和ONLYOFFICE创建您的WebOffice云办公系统

    原作者:Raj  转载来源:https://www.itzgeek.com/how-tos/linux/create-your-web-office-with-nextcloud-and-onlyof ...

  2. SpringBoot快速搭建

    文章目录 SpringBoot快速搭建 @SpringBootApplication @Configuration @EnableAutoConfiguration SpringFactoriesLo ...

  3. 第一章:基于 SpringBoot 快速搭建QQ机器人,并监听群事件

    第一章:基于 SpringBoot 快速搭建QQ机器人 前言:知识与储备 这个QQ机器人能干什么? 第一步:搭建Maven项目环境 第二步:编写pom文件 第三步:编写启动类 第四步:创建配置文件 第 ...

  4. Spring-Boot快速搭建web项目详细总结

    最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...

  5. Docker 环境的快速搭建

    linux下安装 Docker 配置阿里云docker 源并安装 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/ ...

  6. TeamSpeak服务器无法运行,Teamspeak docker两步快速搭建运行 及 服务器权限丢失解决办法...

    昨晚在调试ts频道组权限,不小心把自己权限弄丢了,一番尝试无果只能选择重装,由于残留东西无法理清,之前的搭建方法出错 Teamspeak 华为云linux快速搭建,最终找到这个最快速的搭建方法. 1. ...

  7. 【干货】Dask快速搭建分布式集群(大数据0基础可以理解,并使用!)

    非常开心,解决了很久都没有解决的问题 使用的语言: Python3.5 分布式机器: windows7 注意到,其实,通过这工具搭建分布式不需要管使用的电脑是什么系统. 分布式使用流程 Created ...

  8. Docker + FastDFS + Spring Boot 一键式搭建分布式文件服务器

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 首先说一下从零开始自己去搭一个fastdfs挺麻烦,后来看到 ...

  9. 三分钟快速搭建分布式高可用的Redis集群

    这里的Redis集群指的是Redis Cluster,它是Redis在3.0版本正式推出的专用集群方案,有效地解决了Redis分布式方面的需求.当单机内存.并发.流量等遇到瓶颈的时候,可以采用这种Re ...

最新文章

  1. 0x开头的颜色值和#开头的颜色值的区别以及转化
  2. 再谈MySQL JSON数据类型
  3. js原型和原型链_JS里的原型和原型链
  4. Mysql 替换字段的一部分内容
  5. html label 两端对齐,如果实现表单的label文字两端对齐
  6. tensorboard 1.14.0 has requirement setuptools>=41.0.0, but you‘ll have setuptools 40.2.0
  7. python3安装M2Crypto模块
  8. linux脚本 exe,Powershell下载并运行exe文件
  9. Markdown编辑器-MarkdownPad下载与安装(win10)
  10. 黑马程序员—一张帖看完黑马所有学科、班级就业薪资贴
  11. win10黑科技,新建桌面非常好用
  12. 2021年全球与中国滴漏式咖啡机行业市场规模及发展前景分析
  13. 【使用SqliteSpy访问Sqlite3数据库】
  14. 多核 CPU 和多个 CPU 有何区别?与线程的关系?
  15. 洛谷-运输(P2094)
  16. Oracle执行UPDATE语句的步骤
  17. 【原创】【NOIP】文化之旅
  18. 解决netsh winsock reset找不到指定文件
  19. AI路径查找器的使用
  20. Oracle基础操作

热门文章

  1. 区块链的有趣应用:买彩票、云养鸡、查茅台
  2. 李国庆俞渝撕破脸,当当喊话:冲动是魔鬼 冷静下来吧
  3. 华为云的“大招”——Euler开源 Gauss开放 旨在建立云生态
  4. 票价最低10元 北京大兴国际机场线票价方案正式启用
  5. 格力电器2018年年度权益分派方案出炉:共派发90亿元
  6. 会涨价么?苹果iPad和MacBook拟采用三星OLED屏幕
  7. 智能门锁半夜离奇开门吓坏用户 官方回应:只是一场误解
  8. 阿里巴巴北京总部鸟瞰图曝光:今天又是想去阿里上班的一天!
  9. oracle恢复关系,SCN与Oracle数据库恢复的关系–补充
  10. java scheduletask_spring中定时任务taskScheduler的详细介绍