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地址,我们之后通过浏览器也的确能够进行访问了。





相关文章
|
3月前
|
Java
springboot整合fastdfs、启动不成功
springboot整合fastdfs、启动不成功
29 0
|
1月前
|
Java 应用服务中间件
SpringBoot:修改上传文件大小的限制+tomcat
SpringBoot:修改上传文件大小的限制+tomcat
53 1
|
1月前
|
存储 前端开发 Java
基于SpringBoot实现文件上传和下载(详细讲解And附完整代码)
基于SpringBoot实现文件上传和下载(详细讲解And附完整代码)
|
1月前
|
Java
SpringBoot启动指定配置文件路径
SpringBoot启动指定配置文件路径
14 0
|
4月前
|
存储 Java 大数据
Springboot整合Minio实现文件上传和下载
Minio是一个灵活、高性能、开源的对象存储解决方案,适用于各种存储需求,并可以与云计算、容器化、大数据和应用程序集成。它为用户提供了自主控制和可扩展性,使其成为一个强大的存储解决方案。
244 0
|
8月前
|
存储 编解码 前端开发
SpringBoot整合FastDFS实现图片的上传
  文件的上传和预览在web开发领域是随处可见,存储的方式有很多,本文采用阿里巴巴余庆大神开发的FastDFS进行文件的存储,FastDFS是一个分布式文件存储系统,可以看我上一篇博文,有安装和配置教程。
85 0
|
9月前
|
Java
SpringBoot-11-文件的上传和下载
本章节我们主要进行SpringBoot文件上传和下载以及的介绍涉及到Thumeleaf以及静态资源的设置,这是因为我们在进行项目开发的时候,经常会遇见需要用到文件上传和下载的时候,例如:通知文档下载,辞职报告模板的下载,员工信息的批量录入需要文件上传。
43 0
springboot 各种文件下载方式(最全)
springboot 各种文件下载方式(最全)
2487 0
|
11月前
|
Web App开发 Java
Springboot文件上传与下载
Springboot文件上传与下载
105 0
|
存储 前端开发 Java
SpringBoot文件上传和下载
SpringBoot文件上传和下载
105 0
SpringBoot文件上传和下载