FastDFS文件上传和下载(java代码实现)

FastDFS的体系结构

FastDFS 主要包括Tracker Server 和 Storage Server。Tracker server 是 FastDFS 文件系统的协调者,主要作用是负载均衡和调度选择 Storage server 进行文件存储。

FastDFS文件上传在这里插入图片描述

  1. Storage Server 定期向Tracker Server 发送状态信息,保持心跳连接。

  2. 客户端发起文件上传请求。

  3. Tracker Server 查询所有与它保持连接的 Storage Server ,调度找到一个合适的 Storage Server。

  4. Tracker Server 向客户端返回该 Storage Server 的相关信息,包括 Storage Server 的 ip 和端口号。

  5. 客户端通过 ip 和端口号与 Storage Server 建立连接,发送文件数据

  6. Storage Server 生成唯一的路径名 file_id ,file_id 由分组名(group)和文件路径名(url)拼接而成。

  7. Storage Server 将接收到的内容写入当前服务器磁盘中,并向客户端返回 file_id 信息,客户端按需要进行保存相关信息。

    java代码实现

    /**
         * 文件上传
         * @param file
         * @return
         */
        public static String[] upload(MyFile file) {
            try {
                // 创建TrackerClient客户端对象
                TrackerClient trackerClient = new TrackerClient();
                // 通过TrackerClient对象获取TrackerServer信息
            	TrackerServer trackerServer = trackerClient.getConnection();
                // 获取StorageClient对象
                StorageClient storageClient = new StorageClient(trackerServer,null);
                NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())};
                String[] strings = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
                return strings;
                // strings[0]==group1  strings[1]=M00/00/00/wKjThF1aW9CAOUJGAAClQrJOYvs424.jpg
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    

    FastDFS文件下载

  1. Storage Server 定期向Tracker Server 发送状态信息,保持心跳连接。

  2. 客户端发起文件下载请求。

  3. Tracker Server 查询所有与它保持连接的 Storage Server ,调度找到一个合适的 Storage Server。

  4. Tracker Server 向客户端返回该 Storage Server 的相关信息,包括 Storage Server 的 ip 和端口号。

  5. 客户端通过 ip 和端口号与 Storage Server 建立连接,客户端向 Storage Server 请求文件数据(携带分组号和文件路径参数)

  6. Storage Server 同一组之间同步线程,共享文件数据,因此即便是不同的 Storage Server 仍能找到对应的文件地址。

  7. Storage Server 发送给客户端对应的文件数据,客户端通过 io 流下载文件数据到本地

    java代码实现

    public static InputStream downFile(String groupName,String remoteFileName){
            try {
                //创建TrackerClient对象
                TrackerClient trackerClient = new TrackerClient();
                //通过TrackerClient对象创建TrackerServer
                TrackerServer trackerServer = trackerClient.getConnection();
                //通过TrackerServer创建StorageClient
                StorageClient storageClient = new StorageClient(trackerServer,null);
                //通过StorageClient下载文件
                byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
                //将字节数组转换成字节输入流
                return new ByteArrayInputStream(fileByte);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值