FastDFS
来源:互联网 发布:stl map源码 编辑:程序博客网 时间:2024/06/10 04:05
1、FastDFS介绍
FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡,支持存储服务器在线扩容,支持相同内容的文件只保存一份,节约磁盘空间,FastDFS只能通过Client API访问,FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等),目前已知支付宝、UC、京东商城、5173等都在使用。
2、FastDFS系统架构
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server(跟踪服务器)作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
Storage server(存储服务器)作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
(1)、文件上传流程
客户端发出上传请求,tracker Server接收后查询有哪些Storage可用,调动一个来打算进行存储。接着将这个存储服务器的ip地址跟端口号返回给客户端。客户端的图片就会上传到这个存储服务器。服务器器生成存储信息索引,将上传的图片写到磁盘,并返回索引给客户端。
文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。比如:
group1
M00/00/01/wKgZhVmoH4OAMlXDAAgxpR8mGTg752.jpg
(2)、文件下载流程
3、java实现文件上传
注:关于服务器的搭建,很长一堆,可以在网上找别人搭建好的(我找的这个名字叫taotao-image-server)。
创建项目,导入fastdfs的jar包(在网上找到这个fastdfs_client项目然后安装到本地仓库)
<dependencies> <dependency> <groupId>fastdfs_client</groupId> <artifactId>fastdfs_client</artifactId> <version>1.25</version> </dependency> </dependencies>
属性配置文件client-properties中写上服务器ip
tracker_server=192.168.25.133:22122
现在传个图片到服务器上
@Test /* * 图片上传 */ public void tesFastDFS() throws Exception{ //1.加载配置文件,写磁盘路径 ClientGlobal.init("D:\\大数据\\FastDFS\\src\\main\\resources\\client.properties"); //2.创建TrackerClient对象 TrackerClient trackerClient = new TrackerClient(); //3.通过trackerClient获得TrackerServer对象 TrackerServer trackerServer = trackerClient.getConnection(); //4.创建StorageServer对象,null值 StorageServer storageServer = null; //5.创建StorageClient,传入storageServer,clientServer对象 StorageClient storageClient = new StorageClient(trackerServer, storageServer); //6.通过storageClient对象来实现文件上传,传入三个参数:文件地址,后缀,元素 String[] files = storageClient.upload_file("C:\\Users\\12706\\Desktop\\图片\\411-49401.jpg", "jpg", null); for (String string : files) { System.out.println(string); } }
控制台输出:group1M00/00/01/wKgZhVmoJCGAUCVwAAgxpR8mGTg456.jpg
浏览器访问的话用:ip地址/组名/虚拟磁盘路径/ 数据两级目录/文件名
测试:
4、java实现文件下载
@Test /* * 图片下载 */ public void tesFastDFS2() throws Exception{ //1.加载配置文件,写硬盘路径而不是classpath下路径 ClientGlobal.init("D:\\大数据\\FastDFS\\src\\main\\resources\\client.properties"); //2.创建TrackerClient对象 TrackerClient trackerClient = new TrackerClient(); //3.通过trackerClient获得TrackerServer对象 TrackerServer trackerServer = trackerClient.getConnection(); //4.创建StorageServer对象,null值 StorageServer storageServer = null; //5.创建StorageClient,传入storageServer,clientServer对象 StorageClient storageClient = new StorageClient(trackerServer, storageServer); //6.通过storageClient对象来实现文件下载,传入2个参数:组名,虚拟磁盘路径/数据两级目录/文件名 byte[] files = storageClient.download_file("group1", "M00/00/01/wKgZhVmoJCGAUCVwAAgxpR8mGTg456.jpg"); FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\mumu.jpg")); fileOutputStream.write(files); }
测试看刚才上传的文件有没有下载到指定位置:
D:\mumu.jpg
已经成功下载到了指定位置。
- fastdfs
- fastdfs
- FastDFS
- FastDFS
- fastdfs
- FastDFS
- fastdfs
- FastDFS
- FastDFS
- FASTDFS
- FastDFS
- fastdfs
- FastDFS
- fastdfs
- fastDFS
- FastDFS
- FastDFS
- fastDFS
- golang设计模式之简单工厂模式
- @Autowired与@Resource的区别
- TODO
- CPU高占用和并发操作HashMap的关系
- 基于centOS 7上的FTP服务器搭建详解
- FastDFS
- 山重水复疑无路,柳暗花明又一村
- JVM的基本了解
- gitLab服务器端文件损坏问题解决
- Python:map()的使用方法
- <8/31>集训周记
- 《Angular与ng-zorro结合》
- mac上配置redis
- 【总结】2016.09-2017.09 再见过去,你好未来