*What's the FastDFS?
FastDFS是用c语言编写的一款开源的分布式文件系统。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标
使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
*Architecture of the FastDFS
FastDFS架构包括 Tracker server(以下简称 T ) 和 Storage server(以下简称 S ) ,服务器请求 T 进行文件上传、下载,通过T调度最终由 S 完成文件上传和下载。
T 的作用是负载均衡和调度,通过 T 在文件上传时可以根据一些策略找到 S 提供文件上传服务。可以将 T 称为追踪服务器或调度服务器。
S 的作用是文件存储,客户端上传的文件最终存储到 S 上, S 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将 S 称为存储服务器
Storage中每个卷里面的Storager都是一样的(冗余备份)
和Redis不同的是,这里的 T/S 没有主从关系
*Process of file upload/download
U:
D:
*How to Use to upload picture
使用前提:
- 把FastDFS提供的jar包添加到工程中
In Controller:
接收一个MultipartFile picFile数据
返回一个json数据
In Service:
- 初始化全局配置。加载一个配置文件。
ClientGlobal.init("配置文件(client.conf-->配置trackerserver的地址)的路径")
- 创建一个TrackerClient对象。
TrackerClient trackerClient = new TrackerClient();
- 创建一个TrackerServer对象。
TrackerServer trackerServer = TrackerClient.getConnection();
- 声明一个StorageServer对象,null。
StorageSErver torageServer = null;
- 获得StorageClient对象。
StorageClient storageClient = new StorageClient(tackerServer, storageServer);
- 直接调用StorageClient对象方法上传文件即可。
String[] strings = storageClient.upload(local_fliename(文件全路径), file_ext_name(扩展名), meta_list(给图片加上属性,可以是null))
返回的strings第一个是图片所在的storage组名称,第二个是图片的访问路径(服务器地址+strings[0]+strings[1])
*How to resolve browser's compatibility
有一些浏览器不支持返回json数据
所以在Controller需要将Service传来的pojo对象转换成String数据,再返回给客户端