Springboot整合MinIO实现系统文件的便捷式管理实例

一、MinIO简介

1.基础描述

MinIO 是一个高性能的对象存储系统,用于存储大量非结构化数据。它以简洁、高效、可靠和高扩展性著称,能够胜任各种数据密集型任务。MinIO 采用了与 Amazon S3 兼容的 API,使得用户无需额外学习即可上手使用。下面是 MinIO 的一些基本特点:

  1. 对象存储:MinIO 主要用于对象存储,即存储大量非结构化数据,例如图片、视频、备份文件等。
  2. S3 兼容性:MinIO 的 API 兼容 Amazon S3 的 API,从而确保了与 S3 集成的应用可以无缝迁移到 MinIO。
  3. 高性能:MinIO 具有极高的性能,可以处理多达数百PB规模的数据。
  4. 简洁易用:MinIO 具有简单的命令行界面和用户友好的浏览器界面。
  5. 开源:MinIO 是完全开源的,并且对所有用户免费。

2.存储机制

MinIO 的存储机制涉及以下几个关键概念:

  1. 桶(Bucket):Bucket 是对象存储系统中的一个容器。MinIO 中的每个对象必须存储在一个特定的存储桶中。桶的名称在账户范围内必须是唯一的。

  2. 对象(Object):对象是 MinIO 中存储的基本单位,包括数据、元数据和唯一标识符。文件在上传到 MinIO 时被存储为对象。

  3. 分布式存储:MinIO 支持分布式部署,即可以将数据分布存储在多台服务器上。这种设计提高了系统的容错能力和扩展性。

  4. 纠删码(Erasure Coding):MinIO 使用纠删码技术来提供高可靠性和高可用性。纠删码允许数据在发生硬件故障时进行自动恢复。它通过将数据拆分成多个分片,并对分片添加冗余信息来实现。即使有数个分片丢失,数据仍然可以被恢复。

  5. 版本控制(Versioning):MinIO 支持版本控制,可以对同一个对象保存多个版本。这样用户可以回滚到对象的早期版本,从而防止数据丢失或误操作。

  6. 加密存储:MinIO 支持加密存储,包括客户端加密(客户端在上传之前加密数据)和服务端加密(服务器在数据存储时加密数据)。这确保存储的数据具有更高的安全性。

二、liunx 系统环境下安装MinIO

1.安装包下载

cd  usr/local mkdir  miniocd minio wget https://dl.min.io/server/minio/release/linux-amd64/minio-20240622052645.0.0-1.x86_64.rpmrpm -ivh minio-20240622052645.0.0-1.x86_64.rpm

2. 创建数据文件存储目录

mkdir -p /data/minio/data

3.启动服务

#启动并制定数据存放的地址
/opt/minioconfig/run/minio server   /data/minio/data/#输出日志Endpoint:  http://localhost:9000  http://127.0.0.1:9000    
AccessKey: minioadmin 
SecretKey: minioadmin#AccessKey和SecretKey 分别为登录的账号与密码

三、Springboot2整合MinIO的代码实例

1.引入基础依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>3.0.12</version>
</dependency>

2.MinIO基础配置

配置要素:地址和端口,登录名,密码,HTML存储桶,图片存储桶。

yml配置如下

minio:endpoint: http://192.168.72.133:9000accessKey: minioadminsecretKey: minioadminbucketNameHtml: htmlbucketNameImage: image

文件上传之后,可以基于文件地址直接访问,但需要在MinIO中配置文件的读写权限:

3.配置参数类

@Component
@ConfigurationProperties(prefix = "minio")
@Data
public class ParamConfig {// 使用lombok插件省略 get 和 set方法private String endpoint ;private String accessKey ;private String secretKey ;private String bucketNameHtml ;private String bucketNameImage ;}

4.基于MinIO的服务类

封装MinIO连接工具,实现文件上传的基础方法,返回文件在MinIO服务上的URL地址。

import io.minio.MinioClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;@Component
public class MinIOConfig {private static final Logger LOGGER = LoggerFactory.getLogger(MinIOConfig.class) ;@Resourceprivate ParamConfig paramConfig ;private MinioClient minioClient ;/*** 初始化 MinIO 客户端*/@PostConstructprivate void init(){try {minioClient = new MinioClient(paramConfig.getEndpoint(),paramConfig.getAccessKey(),paramConfig.getSecretKey());} catch (Exception e) {e.printStackTrace();LOGGER.info("MinIoClient init fail ...");}}/*** 上传 <html> 页面*/public String uploadHtml (String fileName, String filePath) throws Exception {minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ;}/*** 上传 <img> 图片*/public String uploadImg (String imgName, String imgPath) throws Exception {minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ;}
}

5.业务代码中调用MinIO服务

import com.minio.file.config.MinIOConfig;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;@Service
public class UploadServiceImpl implements UploadService {@Resourceprivate MinIOConfig minIOConfig ;// 上传 <html> ,返回服务器地址@Overridepublic String uploadHtml(String fileName, String filePath) throws Exception {return minIOConfig.uploadHtml(fileName,filePath);}// 上传 <img> ,返回服务器地址@Overridepublic String uploadImg(String imgName, String imgPath) throws Exception {return minIOConfig.uploadImg(imgName,imgPath);}
}

上传成功后,根据返回的URL地址,复制到浏览器访问的效果

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

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

相关文章

DNF手游攻略:云手机辅助流光星陨刀详细攻略大全!

DNF手游中&#xff0c;流光星陨刀是鬼剑士的专属神器之一&#xff0c;拥有快速的攻击速度和优秀的物理与法术攻击属性&#xff0c;因其出色的性能和未来升级的潜力&#xff0c;成为广大玩家关注的焦点。 流光星陨刀的背景与起源 流光星陨刀作为鬼剑士的标志性武器之一&#xf…

STM32单片机开发入门(十)SSCOM串口通信助手软件安装及使用提供软件网盘链接

文章目录 一.概要二.SSCOM软件下载安装三.串口通讯配置及应用实例1.串口通讯基本配置2.字符串数据发送和接收的配置操作3.16进制数据发送和接收的配置操作4.定时自动发送数据配置操作5.wifi模块AT指令调试配置操作6.用串口烧录STM32单片机代码配置操作 四.以太网TCP服务器端配置…

【0-1系列】从0-1快速了解搜索引擎Scope以及如何快速安装使用(下)

前言 近日&#xff0c;社区版家族正式发布V2024.5版本&#xff0c;其中&#xff0c;社区开发版系列重磅发布Scope开发版以及StellarDB开发版。 为了可以让大家更进一步了解产品&#xff0c;本系列文章从背景概念开始介绍&#xff0c;深入浅出的为读者介绍Scope的优势以及能力…

工业数字孪生:智能制造的新引擎

数字孪生技术&#xff1a;智能制造的新引擎 一、数字孪生技术的基本概念与工业应用 1.1 数字孪生的定义与原理 数字孪生技术是一种先进的集成技术&#xff0c;它通过在数字空间创建一个精准物理对象的虚拟模型&#xff0c;使得我们可以在数字空间中模拟、分析和预测物理实体…

如何在 Mac 上清空硬盘后恢复丢失的数据?

如果您不小心从 Mac 硬盘上删除了重要文件&#xff0c;您可能会感到非常沮丧。但您仍然可以找回丢失的信息。将 Mac 想象成一个大盒子&#xff0c;里面装着所有东西。丢弃某样东西就像撕掉盒子上的标签&#xff1a;房间现在可以放新东西了&#xff0c;但旧东西仍然在那里&#…

JAVA期末复习题1

目录 Java 填空题整理及解析 1. 说出Java的特点&#xff1a; 2. Java的运行机制是先编译再解释运行。 3. 请按照以下分类补全对应的数据类型&#xff1a; 4. 在有限次数循环时&#xff0c;一般选择for循环结构&#xff1b;未知循环次数时&#xff0c;可以选择while循环结构…

【5G核心网】5G NWDAF(Network Data Analytics Function)网元功能介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

leetcode 动态规划(基础版)最长回文字串

题目&#xff1a; 题解&#xff1a; 首先回文子串肯定是连续的&#xff0c;如果用dp来做就需要找出一个串的所有连续子串&#xff0c;枚举一个串所有连续子串的可行方案是首先枚举子串的右端点&#xff0c;范围是&#xff08;0~s.size()-1&#xff09;,在每一个右端点中枚举左…

【计算机毕业设计】185餐厅点餐微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

高中数学:数列-an和Sn混合的题型处理

一、核心思想 题目一般会给我们一个或几个等式作为条件&#xff0c;其中&#xff0c;含有an和Sn关联的式子 那么&#xff0c;如果&#xff0c;题目需要我们求an&#xff0c;我们就想办法用其他条件消除Sn即可。 反之&#xff0c;求Sn&#xff0c;则用其他条件消除an即可。 二…

数据库系统概论、数据管理的三种方式

一、数据库系统概论 数据库系统管理数据的的方式是用数据库来组织和存储数据&#xff0c;利用数据库管理系统&#xff0c;在操作系统的支持下&#xff0c;统一管理和控制存储在磁盘上的数据库&#xff0c;各类用户通过不同的方式&#xff0c;借助于数据库管理系统&#xff08;…

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序均包含…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-23卷积神经网络LeNet

23卷积神经网络LeNet import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个卷积神经网络 net nn.Sequential(nn.Conv2d(1, 6, kernel_size5, padding2), # 卷积层1&#xff1a;输入通道数1&#xff0c;输出通道数6&#x…

《分析模式》“鸦脚”表示法起源,Everest、Barker和Hay

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》这本书里面用的并不是UML表示法。作者Martin Fowler在书中也说了&#xff0c;该书写于1994-1995年&#xff0c;当时还没有UML。作者在书中用的是一种常被人称为“鸦脚”的…

独立看门狗窗口开门狗

独立看门狗 接线图&#xff1a;按键用于阻塞喂狗。独立看门狗&窗口开门狗接线一样。 第一步&#xff0c;是开启时钟了&#xff0c;只有这个LSI时钟开启了独立看门狗才能运行&#xff0c;所以初始化独立看门狗之前&#xff0c;LSI必须得开启&#xff0c;但是这个开启LSI的…

随记:内卷是什么意思?

内卷&#xff0c;网络流行语&#xff0c;原指一类文化模式达到了某种最终的形态以后&#xff0c;既没有办法稳定下来&#xff0c;也没有办法转变为新的形态&#xff0c;而只能不断地在内部变得更加复杂的现象。经网络流传&#xff0c;很多高等学校学生用其来指代非理性的内部竞…

视频格式怎么转换?9 个免费视频转换工具

前 9 款免费视频转换器有哪些&#xff1f;在此视频转换器评论中&#xff0c;我们收集了一些有用的提示并列出了顶级免费视频转换器软件&#xff0c;还找出了适合所有级别&#xff08;从初学者到专家&#xff09;的最佳免费视频转换器。 1. Geekersoft免费在线视频转换 最好的免…

kafka(二)安装部署(2)windows

一、前提 安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala, 本次安装版本选择&#xff1a; JDK&#xff1a;1.8 Zookeeper&#xff1a;3.6.4 Scala&#xff1a;2.12 Kafka&#xff1a;3.5.2 1、jdk Java Downloads | Oracle 见jdk下载安装。 2、Zookeeper 下载…

C# Winform中制作精美控件(2)

仓库温度监控系统重有个控件&#xff0c;就是温度监控&#xff0c;还是比较精美的&#xff0c;那么我们来看看制作的要点有哪些。 前面我们讨论过布局和圆角按钮。这节主要关注温度计控件 1. 布局&#xff1a; 两个Panel将界面分位上下两个部分&#xff0c;Dock.Top Dock.Fil…

关于小程序内嵌H5页面交互的问题?

有木有遇到&#xff1f;有木有遇到。 小程序内嵌了H5&#xff0c;然后H5某个按钮&#xff0c;需要打开小程序某个页面进行信息完善或登记&#xff0c;登记后要返回H5页面&#xff0c;而H5页面要动态显示刚才在小程序页面登记的信息。 操作流程是这样&#xff1a; 方案1&#…