laravel文件上传临时存储名获取_微服务架构下,SpringCloud集成分布式文件存储中间件:FastDFS...

本文详细介绍了FastDFS的原理、SpringCloud如何集成FastDFS进行文件上传下载,并探讨了FastDFS的存储路径和集群架构。FastDFS是一个轻量级的分布式文件系统,用于大容量文件存储和负载均衡,支持文件的上传、下载、删除和元数据操作。通过SpringCloud集成,可以方便地在微服务架构中实现分布式文件存储。
摘要由CSDN通过智能技术生成
欢迎关注我的头条号:Wooola,10年Java软件开发及架构设计经验,专注于Java、Go语言、微服务架构,致力于每天分享原创文章、快乐编码和开源技术。

什么是FastDFS

FastDFS是由国人余庆所开发,是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。- 来源百科

SpringCloud集成FastDFS

bbd19a1d0ee6faa7c0bc38de6965924e.png

maven依赖

com.github.tobato fastdfs-client 1.25.2-RELEASE

bootstrap.yml配置

fdfs: soTimeout: 30000 connectTimeout: 20000 thumbImage: width: 150 height: 150 trackerList: - 192.168.1.156:22122

定义配置类及客户端操作类

@Configuration@Import(FdfsClientConfig.class)public class FastDFSConfig {}

定义客户端操作类:FastDFSClient

8b2d730e5507b72c61f1bce9217277a5.png

FastDFSClient提供上传、下载、删除、获取元数据等接口。

文件上传

2df94c79e9adde21851b9e9d98956f10.png

文件下载

6a98154d052b3d2a1d1cade3099759ea.png

获取组元数据

b3c0d4e8fa37efedcaa72b2a8d314e77.png

删除文件

6e01d84d5fdda894eba9b3f812867dae.png

接口层Controller

上传接口接收到前端上传文件请求并获取MultipartFile文件对象,通过fdw.uploadFile(file)上传到 192.168.1.156文件服务器。

MultipartFile file = request.getFile(iter.next());fdw.uploadFile(file);

如果文件上传成功,会返回图片存储相对路径。

group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png

一般文件上传到fastdfs文件服务器是免密访问的,如果知道文件路径可以在浏览器直接访问。

8f104a2162384859649b40df89639a34.png

示例代码

1b90a258eb5d32b61d2eb01b95364102.png

FastDFS存储路径说明

示例

group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png

参数说明

  • group1表示文件存储服务器(storage)组ID
  • M00表示存储路径(存储设备)编号
  • 00/09表示两级目录分层,其中09表示九月份。storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
  • CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png表示文件名,不是用户上传时文件名,而是由服务器生成hash文件名

FastDFS原理分析

FastDFS部署架构

6c2f220af8822fe5ee5aac4252223dd3.png

来源网络

FastDFS有两种角色:trackerstorage

tracker负责文件访问的跟踪和负载均衡。storage负责存储文件,它的功能包括:文件存储、文件同步、提供文件访问接口,storage还负责管理文件的元数据,这些数据是以键值对的形式表示的,如:width=1024,键是“width”,值是“1024”。

所有服务器都是对等的,不存在Master-Slave关系,存储服务器采用分组方式,同组内存储服务器上的文件完全相同,不同组的storage server之间不会相互通信。

tracker和storage可以是一个或多个服务器。在tracker或storage的集群中,任何时候都可以从中删除服务器,对线上服务没有任何影响。tracker集群中的服务器是点对点的。由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信

卷/组

存储服务器以 卷/组 形式组织,以获取高容量。存储系统包括一个或多个卷,卷与卷之间的文件是相互独立的。整个存储系统的总容量等于所有卷的容量之和。一个文件卷包括一个或多个存储服务器,一个卷中的存储服务器之间的文件是一样的。一个文件卷中的服务器会互相备份,且这些服务器之间是负载均衡的。当添加一个存储服务器到一个卷的时候,卷中的文件会自动复制到新的服务器,复制完以后,系统会把新服务器切换到线上,已提供存储服务。

当存储容量不足时,你可以添加一个或多个卷来扩展存储容量。一个文件的标识包括两部分:卷名和文件名

总结

目前FastDFS不支持可视化管理界面维护,同时用户在把文件上传的服务器时,原来的文件名变成了FastDFS自创的hash文件名,所以如果有需要,可以在业务层表设计存储源文件名与hash名的对应关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值