FastDFS系列(二):SpringBoot集成FastDFS

系列文章

FastDFS系列(一):基本服务器搭建

FastDFS系列(二):SpringBoot集成FastDFS

FastDFS系列(三):FastDFS防盗链

 

 

目录

前言

构建依赖

集成逻辑

pom

配置文件 

主要逻辑

测试

说明


前言

FastDFS用于构建文件和图片服务器是非常方便的,当前FastDFS的作者余大只提供了java调用的方式以及相关Api,玩C语言的朋友可以去找找资料,有相关的资料但是不是很全面。

要了解单服务器部署fdfs的可以看我的上一篇文章,下面还会构建集群和集成DHT,废话不多说,进入本篇的正题——SpringBoot中如何集成FastDFS。

本系列源码请访问:https://github.com/Wenzx1993/FastDFS

构建依赖

SpringBoot集成FastDFS需要依赖 fastdfs-client-java 这个jar包,里面包含了java调用fdfs的环境初始化逻辑,上传、下载、删除等对fdfs文件的操作方式。

因为余大并未将jar包放到大型的包服务器上进行管理,所以这里直接从仓库拉是不行的,这里采用本地构建依赖的方式引用jar包,当然也可以直接将jar包放到项目中进行引用。

  • 访问git项目地址:https://github.com/happyfish100/fastdfs-client-java ,下载当前项目压缩包

FastDFS系列(二):SpringBoot集成FastDFS_第1张图片

  • 主项目稳定性不保证,生产等需要稳定的环境建议下载正式的稳定版本 (当前非生产,采用当前主版本 1.29)

FastDFS系列(二):SpringBoot集成FastDFS_第2张图片

  • 选择 master 版本下载 .zip 结尾的压缩包到本地桌面,然后解压到桌面上

FastDFS系列(二):SpringBoot集成FastDFS_第3张图片

  • 用相关开发工具(这里推荐 idea)打开 fastdfs-client-java-master 项目,然后运行 npm install

FastDFS系列(二):SpringBoot集成FastDFS_第4张图片

  • 将构建后的 jar 包从 target 目录下拿出来放到桌面上(不用换位置也可以,不过后面要注意路径问题)

FastDFS系列(二):SpringBoot集成FastDFS_第5张图片

  • 接下里就是最重要的步骤,将 fastdfs-client-java-1.29-SNAPSHOT.jar 这个包添加到本地仓库中,通过 mvn 构建的方式,在下图3的位置运行 mvn 命令,除了 fastdfs-client-java-1.29-SNAPSHOT.jar 的位置,其他都可以不变

mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=C:\Users\wenzx\Desktop\fastdfs-client-java-1.29-SNAPSHOT.jar

FastDFS系列(二):SpringBoot集成FastDFS_第6张图片

  • 构建完成过户可以看到相关的打印信息,jar包也可以在本地仓库中寻找到

 

集成逻辑

上面将fdfs依赖的jar包放到本地仓库后,我们可以直接   到项目中,然后就可以开心的玩耍了。

FastDFS系列(二):SpringBoot集成FastDFS_第7张图片

  • pom



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.1.RELEASE
         
    
    com.fdfs
    study
    0.0.1-SNAPSHOT
    study
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
            org.csource
            fastdfs-client-java
            1.29-SNAPSHOT
        

        
            org.springframework.boot
            spring-boot-starter-web
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


 当前springboot版本 2.3.1.RELEASE,因为本地要测试,所以添加了请求相关的 spring-boot-starter-web 

  • 配置文件 

#fastDFS连接超时时间,针对socket套接字函数connect
connect_timeout_in_seconds = 5
#fastDFS网络超时时间
network_timeout_in_seconds = 30
#编码格式
charset = UTF-8
#是否启用token验证(针对fdfs配置文件http.conf,防盗链)
http_anti_steal_token = false
#连接密钥(http.conf要配置一样的密钥)
http_secret_key = FastDFS1234567890
#tracker服务器访问端口
http_tracker_http_port = 80
#tracker服务器地址,多个以逗号隔开
tracker_server = 192.168.1.106:22122

#是否启用连接池
connection_pool.enabled = true
#每一个IP:Port的最大连接数,0为没有限制
connection_pool.max_count_per_entry = 500
#每一个连接的最大空闲时间
connection_pool.max_idle_time = 3600
#达到最大连接数时候的最大等待时间
connection_pool.max_wait_time_in_ms = 1000

本配置文件为 fastdfs-client.properties ,放在项目 resources 下面,这里配置token验证看自己选择,主要是基本验证和防盗链,如果选择配置,要注意 http_secret_key 是否跟服务器端 http.conf 中一致(默认都是:FastDFS1234567890)

注意:当前配置属性前面不要加 fdfs

  • 主要逻辑

@Service
public class UploadService {

    public String upload(MultipartFile file)  {
        //获取文件名
        String filename = file.getOriginalFilename();
        //获取文件类型
        //TODO 最好根据content-type来判断
        String extName= "";
        if(filename.contains("."))
        {
             extName = filename.substring(filename.lastIndexOf(".")+1);
        }
        try {
            StorageClient storageClient = buildClient();
            //返回结果,第一个为组名,第二个为fdfs磁盘地址
            String[] result = storageClient.upload_file(file.getBytes(), extName, null);
            return new StringBuffer(result[0]).append("/").append(result[1]).toString();
        } catch (IOException | MyException e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }

    /**
     * 构建上传对象
     * @return
     */
    public StorageClient buildClient() throws IOException, MyException {
        ClientGlobal.init("fastdfs-client.properties");
        TrackerClient trackerClient = new TrackerClient();
        TrackerServer trackerServer = trackerClient.getTrackerServer();
        StorageClient storageClient = new StorageClient(trackerServer);
        return storageClient;
    }
}

当前是最简单的上传逻辑,有多个storage的可以选择通过创建 StorageServer 来告诉 StorageClient 区分上传。

FastDFS提供的Api功能也是很强大,除了上传,还有删除、修改、下载等。

FastDFS默认返回的是一个数组,数组长度为2,第一个是storage配置的组名( group ),第二个是磁盘后面跟上的详细地址

M00/00/00/xxxxxxxx.jpg )

 

测试

这里启动项目,然后通过 postMan 进行测试

  • 测试上传

FastDFS系列(二):SpringBoot集成FastDFS_第8张图片

返回的未带上具体的文件所在IP地址或者域名,为了防止以后有文件迁移的需求,可以弄成配置或者参数

  • 测试是否能访问

文件访问成功!

 

说明

  1. 当前非完整项目代码,需要的请到源码地址查看:https://github.com/Wenzx1993/FastDFS
  2. FastDFS服务器配置可参考FastDFS系列(一):基本服务器搭建

你可能感兴趣的:(FastDFS,fastdfs,dfs,FastDFS,集成FastDFS,文件服务器)