FastDFS上传文件Demo--springboot实现

养成习惯,先赞后看!!!

1.前言

今天跟着教程后面终于实现了通过springboot将文件上传到FastDFS里面,还是有点小激动的,今天把过程分享出来,希望能够帮助到大家。
还不知道FastDFS怎么安装或者是怎么整合Nginx的朋友,可以去看我之前的这两篇文章:
分布式文件存储系统fastdfs安装教程
整合FastDFS与Nginx,使生成的文件URL能够通过浏览器访问

2.步骤

2.1clone并将客户端导入到项目

因为FastDFS不像我们其他的框架,直接就可以从Maven仓库下载他相应的依赖,然后直接跟着教程后面敲就行了,他是必须我们先从Git上面把它的客户端Clone下来,然后导入到我们的项目,才能够直接使用的。
所以我们首先需要将客户端clone下来。
找到我们的Git工具,然后以管理员身份运行,之后输入下面的命令就能够将客户端clone先来了

git clone https://github.com/happyfish100/fastdfs-client-java

在这里插入图片描述
我们会在Git的目录下面看到这样一个文件:
在这里插入图片描述
这就是FastDFS的客户端,之后我们就将这个客户端拷贝到我们的项目中,但是这时候他没有被识别成Maven的项目,所以我们还需要将它导入成Maven项目,按照下面的步骤即可:
在这里插入图片描述
在这里插入图片描述
之后我们需要将这个项目install到我们的本地仓库,这一步可有可无,但是最好install一下,否则有的时候识别不出来这个项目。
在这里插入图片描述
上面红框里面的地址就是它安装的地址

2.2导入FastDFS客户端的依赖

在这里插入图片描述
复制这段代码到你需要使用文件上传的模块里面。这里有个小坑,到后面我会告诉大家怎么解决。

2.3创建并配置Tracker的配置信息

在需要文件上传的模块的resource文件夹下面创建配置文件

#tracker_server服务的地址及端口号
tracker_server=tracker服务的IP:22122

#连接超时间,默认是30秒
connect_timeout=30000

#网络通讯超时时间,默认是60秒
network_timeout=60000

在这里插入图片描述

2.4编写上传文件的工具类

之后我们就可以正式的来编写我们的工具类了

public static String uploadImage(MultipartFile multipartFile) throws IOException {
    
    
//这里是我定义的常量类
        ConstantUtil constantUtil=new ConstantUtil();
        String ImageUrl= constantUtil.getImageUrl();
        //获取tracker的配置文件路径
        String tracker=PmsUploadUtil.class.getResource("/tracker.conf").getPath();
        //读取配置文件
        try{
    
    
            ClientGlobal.init(tracker);
        }catch (Exception e){
    
    
            e.printStackTrace();
            System.out.println("配置实例化失败");
        }
        TrackerClient trackerClient=new TrackerClient();
        TrackerServer trackerServer=trackerClient.getTrackerServer();
        //创建一个StorageClient对象,需要两个参数TrackerServer对象、StorageServer的引用
        StorageClient storageClient = new StorageClient(trackerServer, null);
        //获取文件的byte数组
        byte[]bytes=multipartFile.getBytes();
        //获取文件的后缀名
        String multipartFileName=multipartFile.getOriginalFilename();
        int index=multipartFileName.lastIndexOf(".");
        String extNamne=multipartFileName.substring(index+1);
        //使用StorageClient对象上传图片;扩展名不带“.”
        try {
    
    
            String[] strings = storageClient.upload_file(bytes, extNamne, null);
            //返回数组。包含组名和图片的路径。重组成URL链接
            for (String string : strings) {
    
    
                ImageUrl+="/"+string;
            }
        }catch (Exception e){
    
    
            e.printStackTrace();
        }

        return ImageUrl;
    }

这里还有一个注意点就是 FastDFS1.27FastDFS1.29 两个版本有些许的不一样

在1.27的版本里面:
我们获取TrackerServer是通过trackerClient.getConnection()来获取的,
但是在1.29的版本里面:
我们获取TrackerServer是通过trackerClient.getTrackerServer()来获取的,

其次FastDFS中的上传函数主要是下面两种,

在这里插入图片描述
这两个函数只有第一个参数存在区别,第一是以二进制数据的形式将文件上传上去,第二个则是通过我们传入的文件的文件路径将文件上传上去。这里我选择的是通过第一种方式将文件进行上传,这里大家根据自己的实际需要进行选择。到这里我们关于文件的上传就已经编写完毕,接下来我们就可以进行测试了,但是不好意思,不出意外的话,你可能会碰到这么个bug:Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError

这个bug的意思就是你项目里面同时使用了 log4j-over-slf4j.jar 和 slf4j-log4j12.jar ,刚好这两个包是冲突的,所以我们必须要将其中一个去掉,但是之前自己的项目都是能够正常运行的,所以不出意外应该是FastDfS客户端里面应该是引用了上面依赖中的一个,所以这里我们重新进FastDFS客户端的pom依赖里面就能够看到他的依赖有哪些,我们可以看到如下图所示:
在这里插入图片描述
说明就是因为FastDFS中又引入了其中的一个,所以我们需要在导入fastDFS的依赖里面将该依赖刨除掉

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

这样我们的项目基本就能运行了

3. 上传演示

到了这里我们就可以来进行实际的测试一下了

在这里插入图片描述
可以看到图片的确上传上去了,并且后台给我们返回了FastDFS为我们生成的图片的URL地址,我们之后通过浏览器也的确能够进行访问了。

码字不易,如果觉得对你有帮助的话,可以关注我的公众号,新人UP需要你的支持!!!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lovely__RR/article/details/109580760