Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FastDFS上传文件Demo--springboot实现

FastDFS上传文件Demo--springboot实现

作者头像
萌萌哒的瓤瓤
发布于 2021-01-13 09:52:17
发布于 2021-01-13 09:52:17
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

1.前言

今天跟着教程后面终于实现了通过springboot将文件上传到FastDFS里面,还是有点小激动的,今天把过程分享出来,希望能够帮助到大家。

还不知道FastDFS怎么安装或者是怎么整合Nginx的朋友,可以去看我之前的这两篇文章:

分布式文件存储系统fastdfs安装教程

整合FastDFS与Nginx,使生成的文件URL能够通过浏览器访问

2.步骤

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

因为FastDFS不像我们其他的框架,直接就可以从Maven仓库下载他相应的依赖,然后直接跟着教程后面敲就行了,他是必须我们先从Git上面把它的客户端Clone下来,然后导入到我们的项目,才能够直接使用的。

所以我们首先需要将客户端clone下来。

找到我们的Git工具,然后以管理员身份运行,之后输入下面的命令就能够将客户端clone先来了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/happyfish100/fastdfs-client-java

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

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

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

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

2.2导入FastDFS客户端的依赖

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#tracker_server服务的地址及端口号
tracker_server=tracker服务的IP:22122

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

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

2.4编写上传文件的工具类

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 两个版本有些许的不一样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的依赖里面将该依赖刨除掉

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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地址,我们之后通过浏览器也的确能够进行访问了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
FastDFS Java Client
前面一文描述了如何部署FastDFS服务器,本文在此基础上,介绍如何利用FastDFS的Java客户端与服务器交互完成文件管理 本地安装 git clone https://github.com/happyfish100/fastdfs-client-java.git cd fastdfs-client-java mvn clean install 添加依赖 pom.xml <dependency> <groupId>org.csource</groupId> <artifactId>f
十毛
2019/03/27
2.3K0
spring boot集成fastDFS以及入门小Demo(三)
3.1、使用配置文件创建连接(入参:classpath:fastDFS/fdfs_client.properties)
ha_lydms
2023/08/09
3590
spring boot集成fastDFS以及入门小Demo(三)
FastDFS快速实现和SpringBoot的整合开发
  首先我们来看下如何实现FastDFS中提供的JavaAPI来直接实现对应的文件上传和下载操作。
用户4919348
2022/04/13
1.3K0
FastDFS快速实现和SpringBoot的整合开发
快速学习-fastDFS入门
tracker和storage使用相同的安装包,fastDFS的下载地址在:https://github.com/happyfish100/FastDFS
cwl_java
2020/01/14
5760
快速学习-fastDFS入门
FastDFS分布式文件系统
FastDFS架构包括Tracker server 和 Storage server 。客户端请求Tracker server 进行文件上传、下载,通过Ttacker server 调度,最总由Storage server 完成文件上传和下载。
Java廖志伟
2022/09/28
5080
FastDFS分布式文件系统
松哥手把手教你用 FastDFS 构建分布式文件管理系统
说起分布式文件管理系统,大家可能很容易想到 HDFS、GFS 等系统,前者是 Hadoop 的一部分,后者则是 Google 提供的分布式文件管理系统。除了这些之外,国内淘宝和腾讯也有自己的分布式文件管理系统,都叫 TFS(Taobao File System 和 Tencent File System)。
江南一点雨
2020/03/06
1K0
松哥手把手教你用 FastDFS 构建分布式文件管理系统
手把手fastDFS实战2-文件读写
启动服务以后,可通过 http://localhost:8080/file/ 来访问首页
技术路漫漫
2020/06/22
5600
Java 实现 FastDFS 实现文件的上传、下载、删除
上述方法就是将图片的 base64 码进行转换并上传到了 fastdfs 上。以下是可复制粘贴的源码:
create17
2020/03/12
3.8K0
爆肝两万字,详解fastdfs分布式文件系统
技术论坛:http://bbs.chinaunix.net/forum-240-1.html
SmallRoll小卷
2023/03/09
8560
爆肝两万字,详解fastdfs分布式文件系统
FastDFS实用笔记 (Docker 搭建环境 + 整合 SpringBoot)
FastDFS 是一个开源轻量级分布式文件系统,为互联网应用量身定做。采用 c 语言开发。是一个软件/软件服务器,它对文件进行管理,但是所管理的文件通常不在一个节点上。功能如下:
Gorit
2021/12/08
1.3K0
FastDFS实用笔记 (Docker 搭建环境 + 整合 SpringBoot)
FastDFS的简单使用
互联网中有海量的文件,比如电商网站有海量的图片文件,视频网站有海量的视频文件,如果使用传统的模式上传文件,肯定是不可取的。因此需要使用第三方服务器来存储图片 。
宋先生
2019/07/18
6550
FastDFS的简单使用
微服务[学成在线] day08:FastDFS 实现课程图片管理
FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
LCyee
2020/08/05
1.3K0
微服务[学成在线] day08:FastDFS 实现课程图片管理
使用java调用fastDFS客户端进行静态资源文件上传
  上篇博客我介绍了FastDFS的概念、原理以及安装步骤,这篇文章我们来聊一聊如何在java中使用FastDFSClient进行静态资源的上传。
阿豪聊干货
2018/08/09
1.6K0
springboot(十八):使用Spring Boot集成FastDFS
上篇文章介绍了《如何使用Spring Boot上传文件》,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中。 这个项目会在上一个项目的基础上进行构建。 1、pom包配置 我们使用Spring Boot最新版本1.5.9、jdk使用1.8、tomcat8.0。 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <vers
纯洁的微笑
2018/04/18
1.4K0
springboot(十八):使用Spring Boot集成FastDFS
高可用高性能分布式文件系统FastDFS实践Java程序
  在前篇 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备 中已介绍搭建高可用的分布式文件系统架构。   那怎么在程序中调用,其实网上有很多栗子,这里在他们的基础上作个简单的介绍。 下载源码并加入本地仓库 官网Java客户端源代码:https://github.com/happyfish100/fastdfs-client-java   打开源码后 执行maven install 将代码打成jar到本地maven仓库(这步可自行 google)
欢醉
2018/03/28
1.3K0
分布式文件系统如何做?终于有篇文章分布式文件上传讲清楚了
/usr/local/docker/fastdfs:用于存放docker-compose.yml配置文件及FastDFS数据卷
攻城狮Chova
2021/11/03
4840
分布式文件系统如何做?终于有篇文章分布式文件上传讲清楚了
FastDFS 分布式文件系统入门
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块拆分为多个子业务,部署在不同的服务器上,解决高并发的问题。
RendaZhang
2020/10/26
1.3K0
【FastFDS】SpringBoot整合FastDFS实战(附完整工程源码)
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
7390
【FastFDS】SpringBoot整合FastDFS实战(附完整工程源码)
#Centos7.x 搭建FastDFS并通过Nginx配置http或https访问
FastDFS及其架构的简介: FastDFS:是一个开源的分布式文件系统,用 C 语言实现,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。 跟踪器(tracker)用来追踪文件,相当于是文件的一个索引。 存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到
花落花相惜
2021/11/26
1.2K0
SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件上传、文件下载等,解决了大容量存储和负载均衡的问题。
知了一笑
2019/07/19
1.2K0
推荐阅读
相关推荐
FastDFS Java Client
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档