FastDFS上传文件Demo--springboot实现

简介: 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

20201109164634694.png


我们会在Git的目录下面看到这样一个文件:


20201109164725922.png


这就是FastDFS的客户端,之后我们就将这个客户端拷贝到我们的项目中,但是这时候他没有被识别成Maven的项目,所以我们还需要将它导入成Maven项目,按照下面的步骤即可:


20201109164941464.png


之后我们需要将这个项目install到我们的本地仓库,这一步可有可无,但是最好install一下,否则有的时候识别不出来这个项目。


20201109164941465.png


上面红框里面的地址就是它安装的地址


2.2导入FastDFS客户端的依赖


20201109165608513.png


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


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


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

#tracker_server服务的地址及端口号
tracker_server=tracker服务的IP:22122
#连接超时间,默认是30秒
connect_timeout=30000
#网络通讯超时时间,默认是60秒
network_timeout=60000

20201109165412429.png


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中的上传函数主要是下面两种,


20201109170812703.png


这两个函数只有第一个参数存在区别,第一是以二进制数据的形式将文件上传上去,第二个则是通过我们传入的文件的文件路径将文件上传上去。这里我选择的是通过第一种方式将文件进行上传,这里大家根据自己的实际需要进行选择。到这里我们关于文件的上传就已经编写完毕,接下来我们就可以进行测试了,但是不好意思,不出意外的话,你可能会碰到这么个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依赖里面就能够看到他的依赖有哪些,我们可以看到如下图所示:


20201109171626734.png


说明就是因为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. 上传演示


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


image.png


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





相关文章
|
XML Android开发 数据格式
android中SVG 的使用姿势
android中SVG 的使用姿势
1370 0
android中SVG 的使用姿势
|
Java Linux Android开发
java 对PDF的操作(生成,转换,转图片,转base64等)
java 对PDF的操作(生成,转换,转图片,转base64等)
4776 0
|
运维 监控 Linux
解决CPU与带宽高使用率问题:深入分析与应对策略
引言:性能问题的诊断与优化 在运维工作中,操作系统性能问题如影随形,典型代表是CPU使用率高和带宽使用率高的问题,它们直接影响应用的性能和响应时间。这篇记录将逐个分析这两个问题的产生原因和解决方法。
解决CPU与带宽高使用率问题:深入分析与应对策略
cocos creator+vscode安装及配置介绍
cocos creator+vscode安装及配置介绍
527 0
|
并行计算 Java 应用服务中间件
JUC并发编程超详细详解篇(一)
JUC并发编程超详细详解篇
2095 1
JUC并发编程超详细详解篇(一)
|
网络性能优化 运维 监控
MPLS还是SD-WAN?企业组网该怎么选?
企业在组网时面临MPLS与SD-WAN的选择困境。MPLS以其稳定性和QoS保障脱颖而出,适合语音、视频等高要求应用,但成本高、扩展性差。相反,SD-WAN提供灵活、成本效益高的解决方案,通过智能路由优化传输,易于部署管理,但依赖宽带可能导致性能不稳。选择关键在于评估业务需求和网络稳定性的重要性。
207 2
|
网络协议 算法 Linux
探索TCP状态机之旅:发现网络连接的生命周期与神秘魅力
探索TCP状态机之旅:发现网络连接的生命周期与神秘魅力
629 0
|
开发框架 JavaScript 前端开发
vue2.0 + element-ui 实战项目- 搭建环境(一)
vue2.0 + element-ui 实战项目- 搭建环境(一)
544 0
|
定位技术
【DIY无人机】导航板(I2C-GPS)烧录
GPS,其实应该是指Global Navigation Satellite System全球导航卫星系统,即GNSS,主要是用来定位的系统,目前全球定位系统有下面几种.....
889 1
【DIY无人机】导航板(I2C-GPS)烧录
|
存储 弹性计算 安全
阿里云服务器CPU处理器Intel Xeon(Ice Lake) Platinum 8369B
阿里云服务器CPU处理器Intel Xeon(Ice Lake) Platinum 8369B,基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定。目前阿里云第七代云服务器ECS计算型c7、ECS通用型g7、内存型r7等规格均采用该款CPU