FastDFS

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);
            }

    }
控制台输出:
group1
M00/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
这里写图片描述
已经成功下载到了指定位置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值