欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FastDFS上传文件示例

程序员文章站 2022-06-03 08:53:50
...

FastDFS介绍

1. 简介
    FastDFS 是用 c 语言编写的一款开源的分布式文件系统,拥有冗余备份、负载均衡、线性扩容等机制,使用 FastDFS 可以提供文件上传、下载等服务。

2. 负载均衡和冗余备份
FastDFS上传文件示例
    FastDFS 中包括 Tracker server 和 Storage Server。Tracker Server 的作用是负载均衡和调度,我们在上传文件的时候,TrackerServer 根据一定的策略找到可用的 storage Server,具体的上传下载等操作由 Storage Server 来完成。
    Storage Server 的作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage Server 使用的是操作系统的文件系统来管理文件。Storage 集群分为多个组,每个组之间存储的内容是不同的,但是每个组内存储的内容是相同,这样就实现了冗余备份。

3. 线性扩容
    FastDFS 扩容分为两种:横向扩容和竖向扩容。横向扩容指新增一个 Storage 组,竖向扩容指在同一个组中增加服务器。一个 FastDFS系统 的存储容量等于所有组的存储容量之和,但是每一个组的存储容量取决于存储容量最小的服务器,所以同一个组中的存储容量要大致相等,否则会造成空间浪费。

上传文件示例

1. 上传文件的流程
FastDFS上传文件示例
① 初始化链接信息
② 创建一个Tracker客户端,目的是为了链接Tracker获取TrackerServer对象
③ 通过 TrackerServer 创建一个 Storage客户端 对象,该对象的作用是操作Storage
④ 通过Storage客户端实现文件上传
⑤ 获取文件上传信息

明白了上传文件的步骤,接下来就可以写代码来上传文件了。
1) 首先上传文件要依赖 FastDFS 客户端 jar 包。
       *仓库中并没有收录 FastDFS 客户端的 jar 包,所以需要手动将 jar 包安装到本地仓库中。

mvn install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastdfs  -Dversion=1.2 -Dpackaging=jar -Dfile=d:\setup\fastdfs_client_v1.20.jar

2)在 pom 文件中引入 jar 包的坐标

<dependencies>
        <dependency>
            <groupId>org.csource.fastdfs</groupId>
            <artifactId>fastdfs</artifactId>
        </dependency>
</dependencies>

3)将连接信息写入配置文件中
FastDFS上传文件示例
4)根据上传文件的步骤写代码

	/**
     * 实现FastDFS文件上传
     * @param confFilename:链接tracker的配置文件全路径
     * @param fileName:上传文件的全路径
     * @return:地址信息
     */
    public static String[] upload(String confFilename,String fileName) throws Exception {
        confFilename = getConfig(confFilename);
        fileName = getConfig(fileName);
        // 1.初始化链接信息
        ClientGlobal.init(confFilename);
        // 2.创建一个Tracker客户端,目的是为了链接Tracker获取TrackerServer对象
        TrackerClient trackerClient = new TrackerClient();
        TrackerServer trackerServer = trackerClient.getConnection();
        // 3.通过TrackerServer创建一个Storage客户端对象,该对象的作用是操作Storage
        StorageClient storageClient = new StorageClient(trackerServer,null);
        // 4.通过Storage客户端实现文件上传
        String[] address = storageClient.upload_file(fileName, null, null);
        // 5.获取文件上传信息
        return address;
    }

	public static String getConfig(String path){
        if (path.startsWith("classpath:")){
            path = path.replace("classpath:",UploadUtils.class.getResource("/").getPath());
        }
        return path;
    }

上传成功,会将地址返回:
FastDFS上传文件示例
2. 下载文件的流程
FastDFS上传文件示例