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
这里写图片描述
已经成功下载到了指定位置。

原创粉丝点击