栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统

前言

最近在做一款图床服务,前面的文章也有提到,之前整合了阿里云 OSS 做图片存储,虽然小批量的存储并不贵,然而再少也是肉,还是有点心疼的。

恰好,双十一搞活动,顺手购买了腾讯云的2C4G3MB的云服务器,不得不说真香!入手六百多,真香,毕竟是3MB的带宽。

不要问我双十一为嘛不买阿里云,因为我等老用户狗都不如,只有续费和满多少减几块的所谓福利了。

简介

FastDFS是用c语言编写的一款开源的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相册网站、视频网站等。

架构

软件
  • SpringBoot2.0,不说了都懂
  • Nginx,提供HTTP服务
  • Docker,一件安装容器,后面的就都不需要了
  • FastDFS,C语言编写的一款开源的分布式文件系统
  • libfastcommon,包含了FastDFS运行所需要的一些基础库
  • Fastdfs-nginx-module,Nginx结合 fastdfs-nginx-module插件去实现http协议
安装

如果一步步安装FastDFS以及其依赖,极其复杂,有可能你捣鼓一上午不一定能配置好!这里建议大家使用Docker一键安装,只需要把存储目录映射出来即可。

docker run --name fastdfs --privileged=true --net=host 
  -e IP=192.168.1.156 -e WEB_PORT=8080 
  -v /home/fastdfs:/var/local/fdfs 
		 -d --restart=always 
  registry.cn-beijing.aliyuncs.com/itstyle/fastdfs:1.0

安装成功以后,会在 /home/fastdfs 目录下生成两个目录文件夹,tracker 和 storage。

这里需要注意几点:

  • 一定要映射宿机存储文件路径
  • IP一定要配置为内网或者公网地址
  • 网络类型一定要设置为 host 类型

安装完成以后,浏览器访问:http://ip:8080 如果显示Nginx欢迎页说明安装配置成功。

整合

接下来我们就要与SpringBoot整合了,pom.xml引入第三方工具类:


    com.github.tobato
    fastdfs-client
    1.26.6

在 application.properties 引入配置:

# ===================================
# 分布式文件系统FDFS配置
# ===================================
# 连接超时时间
fdfs.connect-timeout=600
# 读取超时时间
fdfs.so-timeout=1500
# 缩略图的宽高
fdfs.thumb-image.height=150
fdfs.thumb-image.width=150
# tracker服务配置地址列表,替换成自己服务的IP地址,支持多个
fdfs.tracker-list=192.168.1.15:22122
fdfs.pool.jmx-enabled=false

最后写个工具类,基本搞定,坐等上传:

@Component
public class FastdfsUtils {
    public static final String DEFAULT_CHARSET = "UTF-8";

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    
    public StorePath upload(MultipartFile file) throws IOException {
 // 设置文件信息
 Set mataData = new HashSet<>();
 mataData.add(new metaData("author", "fastdfs"));
 mataData.add(new metaData("description",file.getOriginalFilename()));
 // 上传
 StorePath storePath = fastFileStorageClient.uploadFile(
  file.getInputStream(), file.getSize(),
  FilenameUtils.getExtension(file.getOriginalFilename()),
  null);
 return storePath;
    }

    
    public void delete(String path) {
 fastFileStorageClient.deleteFile(path);
    }

    
    public void delete(String group,String path) {
 fastFileStorageClient.deleteFile(group,path);
    }

    
    public void download(String path, String filename, HttpServletResponse response) throws IOException {
 // 获取文件
 StorePath storePath = StorePath.parseFromUrl(path);
 if (StringUtils.isBlank(filename)) {
     filename = FilenameUtils.getName(storePath.getPath());
 }
 byte[] bytes = fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray());
 response.reset();
 response.setContentType("applicatoin/octet-stream");
 response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
 ServletOutputStream out = response.getOutputStream();
 out.write(bytes);
 out.close();
    }
}
图床预览

注意事项
  • 生产环境中建议集群使用,搭建高可靠的云存储服务。

  • 如果是本地开发云服务器需要开放 8080、22122 端口,生产环境不建议开启,所有的请求最好走内网。

参考:https://gitee.com/52itstyle

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/236808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号