springboot 2.1 实践教程(二十一)-整合FastDFS

分布式文件系统fastDfs集群搭建及springboot整合fastdfs客户端 *服务器规划 跟踪服务器1【主机】(Tracker Server):10.10.77.165 跟踪服务器2【备机】(Tracker Server):10.10.77.166 存储服务器1(Storage Server):10.10.77.165 存储服务器2(Storage Server):10.10.77.166 存储服务器3(Storage Server):10.... 阅读详情

整合步骤:

  • 创建SpringBoot项目
    在这里插入图片描述

  • 引入fastdfs-client-java包

<dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.28</version>
 </dependency>
  • 在 resources 目录下新建 fdfs_client.conf 文件
tracker_server = 192.168.1.107:22122
  • 编写FastDFS工具类FastdfsClientUtil.java用于封装上传、下载、删除文件等方法。
package org.learn.utils;

import org.csource.fastdfs.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * FastDFS上传工具类
 */
@Component
public class FastdfsClientUtil {
    private static final Logger logger = LoggerFactory
            .getLogger(FastdfsClientUtil.class);

    private static final String CONFIG_FILENAME = "fdfs_client.conf";

    // 加载文件
    static {
        try {
            ClientGlobal.init(CONFIG_FILENAME);
            logger.info("初始化 Fastdfs Client 配置信息:{}", ClientGlobal.configInfo());

        } catch (Exception e) {
            logger.error(e.toString(), e);
        }
    }

    /**
     * 上传文件
     * @param fileContent
     * @param extName
     * @return
     * @throws Exception
     */
    public String[] uploadFile(byte[] fileContent, String extName) {

        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            return storageClient.upload_file(fileContent, extName, null);

        } catch (Exception e) {
            logger.error(e.toString(), e);
            return null;
        }

    }

    /**
     * 下载文件
     * @param groupName
     * @param fileId
     * @return
     */
    public byte[] downloadFile(String groupName, String fileId) {
        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            byte[] fileByte = storageClient.download_file(groupName, fileId);
            return fileByte;
        } catch (Exception e) {
            logger.error(e.toString(), e);
            return null;
        }
    }


    /**
     * 删除文件
     * @param groupName
     * @param remoteFilename
     * @return
     */
    public int deleteFile(String groupName, String remoteFilename) {

        try {
            TrackerClient trackerClient = new TrackerClient();
            TrackerServer trackerServer = trackerClient.getTrackerServer();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            int i = storageClient.delete_file(groupName, remoteFilename);
            logger.info("delete file successfully!!!" + i);
            return 1;
        } catch (Exception e) {
            logger.error(e.toString(), e);
            return 0;
        }

    }
}

  • 编写Controller类FdfsClientController.java用于处理FastDFS上传下载功能。
package org.learn.controller;

import org.learn.utils.FastdfsClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;

/**
 * FastDFS上传文件控制器
 */
@Controller
public class FdfsClientController {

    private static Logger logger = LoggerFactory.getLogger(FdfsClientController.class);
    @Autowired
    private FastdfsClientUtil fastdfsClientUtil;


    /**
     * 上传文件
     *
     * @param file
     * @return
     */
    @RequestMapping("/uploadFile")
    public String uploadFile(@RequestParam("file") MultipartFile file, Model view) {
        try {
            // 获取原文件名
            String origFileName = file.getOriginalFilename();
            logger.info("原始文件名:{}", origFileName);

            // 获取扩展名
            String extName = origFileName.substring(origFileName.lastIndexOf(".") + 1);
            logger.info("原始文件扩展名:{}", extName);

            // 获取文件存储路径
            String[] uriArray = new String[0];

            uriArray = fastdfsClientUtil.uploadFile(file.getBytes(), extName);

            String groupName = uriArray[0];
            String fileId = uriArray[1];

            String uri = groupName + "/" + fileId;
            logger.info("返回的文件存储路径:{}", uri);
            view.addAttribute("uri", uri);


            return "index";
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 下载文件
     *
     * @param filePath
     * @param response
     * @return
     */
    @RequestMapping("/downloadFile")
    public void downloadFile(@RequestParam("filePath") String filePath, HttpServletResponse response) {

        try {


            String group = filePath.substring(0, filePath.indexOf("/"));
            String path = filePath.substring(filePath.indexOf("/") + 1);
            int index = filePath.lastIndexOf("/");
            String fileName = filePath.substring(index + 1);
            //group1/M00/00/00/wKgBa18meFmAHaVYAAW8VIh03qE244.png
            /**
             * 参数格式:
             * groupName: group1
             * fileId: M00/00/00/wKgBa18meFmAHaVYAAW8VIh03qE244.png
             */
            byte[] fileByte = fastdfsClientUtil.downloadFile(group, path);
            InputStream inputStream = new ByteArrayInputStream(fileByte);
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + 		                               URLEncoder.encode(fileName, "UTF-8"));
            byte[] buff = new byte[1024];
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            OutputStream os = response.getOutputStream();
            int i = bis.read(buff);
            while (i != -1) {
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
            os.close();
            bis.close();
            logger.info("Download  successfully!");
        } catch (Exception e) {
            logger.error(e.toString(), e);
        }

    }


    /**
     * 删除文件
     *
     * @param filePath
     * @return
     */
    @RequestMapping("/deleteFile")
    @ResponseBody
    public String deleteFile(@RequestParam("filePath") String filePath) {
        try {
            /**
             * 参数格式:
             * groupName: group1
             * fileId:M00/00/00/wKgBa18meFmAHaVYAAW8VIh03qE244.png
             */
            String group = filePath.substring(0, filePath.indexOf("/"));
            String path = filePath.substring(filePath.indexOf("/") + 1);

            int i = fastdfsClientUtil.deleteFile(group, path);
            return (i > 0) ? "删除文件成功" : "删除文件失败";
        } catch (Exception e) {
            logger.error(e.toString(), e);
            return null;
        }

    }

}

  • 编写上传页面index.html,实现上传一个文件,并能下载获取到该文件。
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
hello,你已经进入到首页
<form action="/uploadFile" enctype="multipart/form-data" method="post">
    文件上传<input type="file" name="file" id="file"/>

    <input type="submit" value="提交">

</form>
</body>
</html>
  • 测试FastDFS是否整合成功

    测试上传图片

    选择上传的文件,提交
    在这里插入图片描述

提交后,图片上传成功,返回上传的路径
在这里插入图片描述

下载图片,执行下载方法,将图片的路径地址作为传输传递到下载方法中

http://localhost:8080/downloadFile?filePath=group1/M00/00/00/wKgBa18mfs2ABii9AAW8VIh03qE824.png

删除图片,执行删除方法,将图片的路径地址作为参数传递到删除方法中
在这里插入图片描述

具体测试代码请在我的码云项目中下载

地址:源码下载地址

SpringBoot整合FastDFS SpringBoot整合FastDFS 文章目录SpringBoot整合FastDFS 前言FastDFS简介: 一、安装FastDFS(使用Dokcer安装) 1. 从镜像库中拉起fastdfs的镜像 2. 运行tracker3. 运行storage 二、FastDFS相关配置 1. 进入刚刚创建的storage容器 2. 修改nginx配置 3. storage和tracker配置文件(按需修改)storage.conftracker.conf 三、1.引入库2.读入数据 阅读详情

相关推荐

springboot整合fastdfs

在项目开发中经常会碰到做文件上传的功能,一般来说,文件上传的步骤就那么几步,前台通过提交一个选中的文件,后端对文件做处理然后将文件上传至指定的地址,这个地址是一个真实的物理存储路径,可以是本地,也可以是fastdfs等其他的linux文件服务器。 我们通过F12可以发现,一些比较大的电商网站里的图片,直接复制图片的url是可以预览并下载下来的,从图片的URL地址规律大概可以推测,这些图片其实是存放...

congge 9534

解决Fastdfs依赖包问题:Dependency 'org.csource:fastdfs-client-java:1.27-SNAPSHOT' not founnd

因为fastdfs-client-java-1.27-SNAPSHOT.jar这个依赖包在目前在Maven中央仓库是已经没有了,所以需要手动引入jar <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifa...

向着高亮的地方 5517

SpringBoot2.x整合FastDFS

本篇博客学习SpringBoot 2.1.11.RELEASE整合FastDFS。 FastDFS作用 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件上传、文件下载等,解决了大容量存储和负载均衡的问题。 安装连接: CentOS 7 安裝FastDFS V6.0.3 我们开始吧 新建一个springboot项目 pom文件 加入fastdfs-...

筱进GG 729

FastDFS配置以及java操作

综合介绍 内容介绍 FastDFS是由淘宝的余庆先生所开发,是一个轻量级、高性能的开源分布式文件系统,用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题,分布式文件系统正好可以解决这个需求。同类的分布式文件系统有谷歌的GFS、HD...

dingcai12003的博客 8170

从零到一:AIC8800 USB-WiFi模块在Linux内核6.x下的驱动适配与避坑指南

本文详细介绍了AIC8800 USB-WiFi模块在Linux内核6.x下的驱动适配全流程,包括环境准备、源码编译、内核API变更处理及常见问题解决方案。重点针对驱动适配中的符号导出、设备ID识别和固件加载等核心挑战提供实用指南,帮助开发者高效完成硬件驱动兼容性调试。

k8l9m0n的博客 1016

SpringBoot 指标监控——Actuator

1、 访问:localhost:8000/actuator 设置健康监控显示具体情况 metrics http://localhost:8000/actuator/metrics/jvm.gc.live.data.size 定制化health信息 //利用构造器,在注册中心中添加cityService.saveCity.count指标 public CityServiceImpl(MeterRegistry meter...

weixin_44302046的博客 4625

SpringBoot整合Fastdfs,实现图片上传(IDEA)

我们部署Fastdfs,就是为了实现文件的上传。 现在使用idea整合Fastdfs,实现图片上传 部署环境:Centos7部署分布式文件存储(Fastdfs) 利用Java客户端调用FastDFS 服务器安装完毕后,咱们通过Java调用fastdfs 加载Maven依赖 fastdfs 没有在中心仓库中提供获取的依赖坐标。 只能自己通过源码方式编译,打好jar 包,安装到本地仓...

南宫乘风-Linux运维-虚拟化容器-Python编程 ownit.top 1389

ROS教程(四):RVIZ使用教程(详细图文)

前言 根据前面的教程已经学会了创建功能包,那么本篇文章主要内容则是通过节点来发布数据至RVIZ

Leslie的博客 17万+

SpringBoot集成FastDFS

fastdfs-client Java客户端并没有存在maven仓库,需要手动下载打包安装进本地仓库。 clone项目 git clone https://github.com/happyfish100/fastdfs-client-java.git 如果环境变量中有maven ,可直接执行命令: mvn clean install 如果没有,可以导入项目到IDEA中,进行打包,先clean, 再install(部署到本地仓库) 然后就可以在项目pom.xml中添加依赖 <dependency&g

D_A_I_H_A_O的博客 513

用PyCharm+Scrapy打造你的第一个爬虫:从安装到实战(附完整代码)

本文详细介绍了如何使用PyCharm和Scrapy框架从零开始构建高效网络爬虫。通过环境配置、项目创建、核心爬虫逻辑编写到数据处理与存储的完整流程,帮助Python开发者快速掌握爬虫开发技巧,并附有实战代码示例。特别适合想要学习Scrapy框架和提升爬虫技能的开发者。

weixin_29038345的博客 867

Innovus时钟树综合CTS实战:从原理到signoff的完整指南

时钟树综合(CTS)是数字后端实现中保障同步电路时序收敛的核心环节,其本质是在物理层面构建低偏斜、可控延迟的全局时钟分发网络。它基于静态时序分析(STA)原理,通过平衡clock skew、insertion delay、transition time与功耗面积等多维约束,对抗工艺电压温度(PVT)变异带来的时序不确定性。技术价值在于支撑GHz级高频芯片的setup/hold签核,广泛应用于CPU、GPU、AI加速器等复杂SoC的Innovus后端流程。本文聚焦CTS在Innovus工具链中的工程落地,覆盖

weixin_28523493的博客 223

SpringBoot整合fastdfs

1、导入jar包 <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.5</version...

... 1万+

电力电子技术(13)——大功率可控整流电路

目录引言2.6.1 带平衡电抗器的双反星形可控整流电路电路结构的特点接平衡电抗器的原因平衡电抗器使得两组三相半波整流电路同时导电的原理分析谐波分析2.6.2 多重化整流电路概述原理目标1)移相多重联结2)多重联结电路的顺序控制3重晶闸管整流桥顺序控制带平衡电抗器的双反星形可控整流电路(是多重化整流电路的重要形式之一)的特点:适用于低电压、大电流的场合。多重化整流电路的特点:绕组的极性相反的目的:消除直流磁通势如图所示,虽然两组相电流的瞬时值不同,但是平均电流相等而绕组的极性相反,所以直流安匝(电流*匝数)互

weixin_45589295的博客 1万+

Springboot整合FastDFS

搭建FastDFS环境 前端通过WebUploader组件实现文件上传 SpringBoot整合FastDFS 1、添加springboot和FastDFS整合依赖 <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.6</version>

sinJack的博客 3万+

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

基于STM32L4XX、HAL库的RTL8201F 以太网收发器(PHY)驱动程序设计

define PHY_RESET_DELAY 1000 // PHY复位延迟(ms)#define PHY_AUTONEGO_DELAY 3000 // 自动协商延迟(ms)/* 检查PHY ID (RTL8201F的ID为0x001CC816) *//* 系统时钟配置,确保ETH有50MHz时钟 *//* 初始化CPU, AHB和APB总线时钟 */

zhusl6688的博客 799

springboot整合Fastdfs

一、利用docker安装fastdfs 在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker。 1.在dockerHub中查询需要下载的fastdfs版本,我下载版本如下图所示,下载命令:docker pull delron/fastdfs:latest 2......

lingerlan510的博客 3003

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

FastDFS整合SpringBoot

FastDFS整合SpringBoot 搭建好fastDFS后当然就是要开始整合到项目中使用,这里使用FastDFS-Client和SpringBoot整合。 如果查看分布式文件系统原理和服务器搭建,可以点击查看。 工具 jdk SpringBoot FastDFS-Client maven FastDFS 11 2.2.2 1.27.1 3.6.3 6.06 FastDFS-...

佐勒之博 1149

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SpringBoot整合FastDFS详细版

SpringBoot整合FastDFS引言下载FastDFS导入FastDFS工程到IDEA安装到maven仓库创建springboot工程进行整合pom.xml创建tracker.conf配置文件封装工具类创建Controllerapplication.ymlindex.jsp测试 引言 接上一篇 Linux下玩转FastDFS FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理...

小薛博客-助力人人成为架构师 5128

FastDFS单机版的安装+整合Nginx+整合springBoot(保姆级教程)

FastDFS单机版的安装+整合Nginx+整合springBoot(保姆级教程超详细)

chuzhou7604的博客 1494

非常详细的FastDFS整合springBoot教程-带文件下载地址

FastDFS整合springBoot教程 编写该教程的目的 本教程基于已有的springBoot框架进行整合,springBoot构架部分不做教学 为了给自己做笔记,同时为所需童鞋少爬点坑。 目录 教程分为三部分:Linux部署、springBoot配置、单元测试 准备工作; FastDFS在linux安装、配置及测试; springBoot配置; 单元测试; 环境及所需文件 服务器:cen...

悬崖上的剁椒鱼头的博客 4084

SpringBoot整合fastDFS

1. 新建SpringBoot项目 2. 项目依赖 <dependencies> <!-- fastDFS-client --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <ve

天天向上 9329

SpringBoot 整合 FastDFS

SpringBoot 整合 FastDFS

qq_42026600的博客 3247
上一篇: FastDFS分布式文件系统入门(三)-Java客户端使用FastDFS
下一篇: springboot 2.1 实践教程(二十二)-整合FastDFS方式(二),基于tobato的fastdfs_client
不善^
博客等级 码龄18年 635粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值