FastDFS系列(二):SpringBoot集成FastDFS

系列文章

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

FastDFS系列(二):SpringBoot集成FastDFS

FastDFS系列(三):FastDFS防盗链

FastDFS系列(四):FastDFS集成FastDHT

 

目录

前言

构建依赖

集成逻辑

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包放到项目中进行引用。

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

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

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

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

  • 接下里就是最重要的步骤,将 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

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

 

集成逻辑

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

  • pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fdfs</groupId>
    <artifactId>study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>study</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.29-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 当前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 进行测试

  • 测试上传

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

  • 测试是否能访问

文件访问成功!

 

说明

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值