docker部署FastDFS整合Springboot

文章目录

    • 1、FastDFS是什么?
    • 2、搭建docker环境
    • 3、部署fastdfs
    • 4、整合springboot
    • 5、接口测试
    • 参考文章

1、FastDFS是什么?

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务

2、搭建docker环境

参考文章:

https://blog.csdn.net/JiuMen3520/article/details/134336301

3、部署fastdfs

1、搜索fastdfs镜像
docker search fastdfs
2、下载镜像
方法一(直接拉取):
docker pull morunchang/fastdfs方法二(百度网盘下载):
链接:https://pan.baidu.com/s/1pAS_wOFJrpk-BlNs3lZYfQ?pwd=bfmu 
提取码:bfmu若选择方法二,执行docker导入镜像命令:
docker load -i fastdfs_latest.tar
3、启动tracker
docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh
4.启动storage
(1)宿主机创建目录(用于磁盘挂载)
mkdir /data/fastDFS/data
(2)执行启动命令
docker run -v /data/fastDFS/data:/data/fast_data/data/00/00 -d --name storage --net=host -e TRACKER_IP=服务器访问IP:22122 -e GROUP_NAME=group1 morunchang/fastdfs sh storage.sh

启动效果:
在这里插入图片描述
修改nginx配置

1.进入storagedocker exec -it storage容器id /bin/bash2.找到nginx配置whereis nginx --->会看到目录在/etc/nginx/下3.修改nginx配置vi /etc/nginx/conf/nginx.conf4.修改监听端口(listen)和访问地址(server_name),我这将端口修改为了80,访问地址为公网ip5.退出容器exit 6.重启 storagedocker restart storage容器id

4、整合springboot

(1)新建springboot项目
(2)加入maven依赖

   <!-- FastDFS --><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId></dependency>

在这里插入图片描述
(3)修改配置文件yml

# FastDFS配置
fdfs:domain: http://服务器IPsoTimeout: 3000connectTimeout: 2000trackerList: 服务器IP:22122

在这里插入图片描述
(3)创建controller类

package com.pie.file.controller;import com.pie.common.core.domain.R;
import com.pie.common.core.utils.file.FileUtils;
import com.pie.file.service.ISysFileService;
import com.pie.system.api.domain.SysFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;/*** 文件请求处理* * @author p*/
@RestController
public class SysFileController
{private static final Logger log = LoggerFactory.getLogger(SysFileController.class);@Autowiredprivate ISysFileService sysFileService;/*** 文件上传请求*/@PostMapping("upload")public R<SysFile> upload(MultipartFile file){try{// 上传并返回访问地址String url = sysFileService.uploadFile(file);SysFile sysFile = new SysFile();sysFile.setName(FileUtils.getName(url));sysFile.setUrl(url);return R.ok(sysFile);}catch (Exception e){log.error("上传文件失败", e);return R.fail(e.getMessage());}}
}

(4)创建service接口

package com.pie.file.service;import org.springframework.web.multipart.MultipartFile;/*** 文件上传接口* * @author p*/
public interface ISysFileService
{/*** 文件上传接口* * @param file 上传的文件* @return 访问地址* @throws Exception*/public String uploadFile(MultipartFile file) throws Exception;
}

(5)创建serviceImpl实现类

package com.pie.file.service;import java.io.InputStream;
import com.alibaba.nacos.common.utils.IoUtils;
import com.pie.common.core.utils.file.FileTypeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;/*** FastDFS 文件存储** @author p*/
@Primary
@Service
public class FastDfsSysFileServiceImpl implements ISysFileService
{/*** 域名或本机访问地址*/@Value("${fdfs.domain}")public String domain;@Autowiredprivate FastFileStorageClient storageClient;/*** FastDfs文件上传接口** @param file 上传的文件* @return 访问地址* @throws Exception*/@Overridepublic String uploadFile(MultipartFile file) throws Exception{InputStream inputStream = file.getInputStream();StorePath storePath = storageClient.uploadFile(inputStream, file.getSize(),FileTypeUtils.getExtension(file), null);IoUtils.closeQuietly(inputStream);return domain + "/" + storePath.getFullPath();}
}

5、接口测试

使用postman访问接口测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考文章

参考文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚星文社官网

推文工具可以帮助你将小说内容简洁明了地转化为推文形式&#xff0c;以便更好地在社交媒体上进行宣传和推广。以下是一些建议的小说推文工具&#xff1a; 聚星文社 字数统计工具&#xff1a;使用字数统计工具&#xff0c;如Microsoft Word或在线字数统计器&#xff0c;来确保你…

[JS]对象

介绍 对象是一种无序的数据集合, 可以详细的描述某个事物 事物的特征在对象中用属性来表示, 事物的行为在对象中用方法来表示 使用 创建对象 let 对象名 {属性名&#xff1a;值&#xff0c;方法名&#xff1a;函数&#xff0c; } let 对象名 new Object(); 对象名.属性…

工业网关的功能与作用解析-天拓四方

在工业4.0和智能制造的时代背景下&#xff0c;工业网关作为连接现场设备与云端平台的桥梁&#xff0c;正发挥着日益重要的作用。它不仅为工业设备的远程监控和管理提供了可能&#xff0c;还为企业实现数字化转型和智能化升级提供了有力支持。本文将对工业网关的功能与作用进行解…

Python:基于TSFEL库对时间序列进行特征分析

1. TSFEL 时间序列作为主要TSFEL提取方法的输入传递&#xff0c;要么作为先前加载在内存中的数组传递&#xff0c;要么存储在数据集中的文件中。 由于TSFEL可以处理多维时间序列&#xff0c;因此随后应用了一套预处理方法&#xff0c;以确保信号质量足够和时间序列同步&#xf…

AI音乐大模型:深度剖析创意与产业的双重变革

随着AI技术的飞速发展&#xff0c;音乐大模型在最近一个月内纷纷上线&#xff0c;这一变革性技术不仅颠覆了传统的音乐创作方式&#xff0c;更是对整个音乐产业及创意产业带来了深远的影响。本文将从多个维度出发&#xff0c;深度剖析AI音乐大模型对创意与产业的双重变革。 一、…

ONLYOFFICE 8.1:引领桌面办公新潮流,功能升级全面提升

目录 一、ONLYOFFICE是什么&#xff1f; 二、功能完善的PDF编辑器 三、幻灯片版式升级 四、改进从右至左显示 五、新的本地化选项 六、多媒体功能增强 七、应用价值探讨 一、ONLYOFFICE是什么&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面…

acme.sh泛证书申请

说明: 1、想每个项目都接入域名+端口访问,所以通过acme.sh申请泛域名证书 2、阿里云域名解析,并且指定公网ip地址对应的公共Nginx服务 3、acme.sh证书只有3个月,所以要用shell自动续签证书 4、阿里云域名已解析,所以二级域名、三级域名能正常解析,如下图所示, 一、阿里云…

charles破解

一、Charles官网下载安装包二、安装charles三、charles破解 一、Charles官网下载安装包 根据自己电脑系统 官网下载即可。 链接: https://www.charlesproxy.com/download/latest-release/ 二、安装charles 点击下载的安装包&#xff0c;然后进行安装。 三、charles破解 打…

服务器如何实现SSH免密码登录?

目录 一、服务器和电脑的区别二、什么是SSH三、什么是免密码登录四、服务器如何实现SSH免密码登录 一、服务器和电脑的区别 服务器和电脑是两种不同类型的计算机系统&#xff0c;它们在设计、功能和用途上存在明显的区别。首先&#xff0c;从硬件配置上看&#xff0c;服务器通…

MySQL学习(3):SQL语句之DDL

1.SQL通用语法与分类 &#xff08;1&#xff09;通用语法 &#xff08;2&#xff09;分类 2.DDL 2.1数据库操作 show DATABASES; #查询所有数据库select DATABASE(); #查询当前数据库create DATABASE 数据库名称 [default charest 字符集] [collate 排列规则]; #default cha…

时序分析(二):input delay分析

一、IO接口分析基本模型 数据按照同步方式可分为系统同步和源同步方式两种。所谓系统同步指发送端和接收端共用一个时钟源&#xff1b;源同步指发送端提供数据同步时钟&#xff0c;接收端根据该时钟进行数据接收。现在多数通信中使用源同步方式&#xff0c;例如以太网、ADC等。…

洗地机怎么选择最好?四大洗地机精选放心入手

在当今生活节奏飞快的社会中&#xff0c;人们越来越渴望拥有一款高性能、实用方便的家用洗地机&#xff0c;能够帮助我们节省大量的清洁时间。因为洗地机它是吸尘器的升级版&#xff0c;清洁力比扫地机器人更强&#xff0c;洗地机通过高速旋转的风机&#xff0c;产生超大吸力&a…

Unity之HTC VIVE Cosmos环境安装(适合新手小白)(一)

提示&#xff1a;能力有限&#xff0c;错误之处&#xff0c;还望指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、unity版本电脑配置相关关于unity版本下载建议&#xff1a;0.先下载unity Hub1.不要用过于旧的版本2.不要下载最新版本或者其他非长期支持版本 二、官网下…

生命在于学习——Python人工智能原理(4.4)

三、Python的数据类型 3.2 Python的组合数据类型 特点&#xff1a;表示多个元素的组合&#xff0c;可以包含不同类型的元素&#xff0c;甚至是其他的组合数据类型。 在内存中通常需要额外的空间来存储元素间的关系。 组合数据类型能够将多个同类型或不同类型的数据组织起来&a…

出版发行企业从传统分销到网格化营销的变革之路(AMT企源)

引言&#xff1a; 本文为该系列文章的第一篇&#xff0c;旨在介绍当前出版发行行业&#xff0c;尤其是各省级新华书店集团围绕“综合教育服务”和“大文化消费服务”两个领域的业务布局下&#xff0c;如何实现营销模式创新、营销组织创新&#xff0c;以推动新华书店集团从传统…

浮动IP绑定主机步骤

文章目录 1&#xff0c;查看本机的原有IP2&#xff0c;绑定浮动IP3&#xff0c;验证绑定情况4&#xff0c;解绑浮动IP 1&#xff0c;查看本机的原有IP ifconfig得到本机的ip是192.168.10.128 2&#xff0c;绑定浮动IP ifconfig ens33:1 192.168.10.10 netmask 255.255.255.0…

墨迹天气与AI数据湖的集成案例(集易连平台)

客户介绍 客户方为国内某皮具生产企业&#xff0c;年设计版型数千款&#xff0c;全国销售门店数一千多家&#xff0c;年销售额达20亿。该AI项目目的是将订单数据、用户行为分析、天气数据、门店位置、客流量等等一系列数据作为AI大模型的输入&#xff0c;经过大模型的训练和…

LeetCode刷题之HOT100之打家劫舍

2024/6/26 大家早上好呀&#xff01;今天不热诶&#xff0c;昨天跟镔哥跑了五公里&#xff0c;配速515简直不要太爽啊&#xff0c;跑完后在操场走一圈&#xff0c;正好发小发了群视频过来&#xff0c;聊了半小时。发小一考研二战失利&#xff0c;去干测试&#xff0c;天天累得不…

ROS话题通信机制实操Python

ROS话题通信机制实操Python 创建ROS工程发布方(二狗子)订阅方(翠花)编辑配置文件编译并执行计算图查看Python话题机制节点 ROS话题通信的理论查阅ROS话题通信流程理论 在ROS话题通信机制实现中&#xff0c;ROS master 不需要实现&#xff0c;且连接的建立也已经被封装了&#…

RedHat9 | RAID配置与管理

一、实验环境 1、RAID简介 RAID&#xff08;Redundant Array of Independent Disks&#xff09;&#xff0c;即独立磁盘冗余阵列&#xff0c;是一种数据存储技术。它通过将多个独立的磁盘驱动器组合起来&#xff0c;形成一个逻辑上的整体&#xff0c;从而提高数据存储的性能、…