MinIO 分布式文件(对象)存储

  1. 简介
    MinIO是高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。

在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品

官网地址:http://www.minio.org.cn/

  1. 下载
    官网下载(8.4.3版本):http://www.minio.org.cn/download.shtml
1、拉取镜像(https://hub.docker.com/r/minio/minio/tags)# 下载新版minio
docker pull minio/minio# 或者下载指定版本的minio
docker pull minio/minio:RELEASE.2021-04-06T23-11-00Z  2、创建容器docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /docker/minio/data:/data -v /docker/minio/config:/root/.minio minio/minio server /data# 或者指定镜像版本并创建容器
docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /docker/minio/data:/data -v /docker/minio/config:/root/.minio minio/minio:RELEASE.2021-04-06T23-11-00Z server /data-p 9000:9000 ,端口映射
-e,环境变量
-d,后台运行
–name,给容器起名字
–restart=always,开机自启
-e “MINIO_ACCESS_KEY=minio”,设置账号
-e “MINIO_SECRET_KEY=minio123”,设置密码
-v 挂载数据卷
07
  1. 运行
    创建四个文件夹data0、data1、data2、data3,用存放文件。

「启动minio服务」

# mac/linux
./minio server ./data0 ./data1 ./data2 ./data3# windows
minio.exe server ./data0 ./data1 ./data2 ./data3
访问地址:http://127.0.0.1:9000/,默认账号和密码都是:minioadmin。

在这里插入图片描述
4. 创建桶
在Minio和其他一些对象存储服务中,“桶”(Bucket)是一个顶层的容器,用于组织和管理存储的对象(Object)。可以将桶类比为文件系统中的文件夹,用于将一组相关的对象进行组织和分类。

每个桶在Minio中具有唯一的名称,并且可以根据需要创建多个桶。用户可以使用桶名称来访问和操作其中的对象。桶名称是全局唯一的,因此需要确保不同应用程序使用不同的桶名称,以避免冲突。

我们创建一个test的桶(bucket)。

  1. SpringBoot 集成 MinIO
    5.1 pom.xml
    添加如下minio依赖
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.3</version>
</dependency>

5.2 MinioConfiguration
配置minio的地址、账号和密码,配置上传文件的大小1024M。

@Configuration
public class MinioConfiguration {private static final String END_POINT = "http://localhost:9000";private static final String USERNAME = "minioadmin";private static final String PASSWORD = "minioadmin";@Beanpublic MinioClient minioClient() {return new MinioClient.Builder().endpoint(END_POINT).credentials(USERNAME, PASSWORD).build();}@Beanpublic MultipartConfigElement multipartConfigElement() {MultipartConfigFactory factory = new MultipartConfigFactory();factory.setMaxFileSize(DataSize.ofMegabytes(1024));factory.setMaxRequestSize(DataSize.ofMegabytes(1024));return factory.createMultipartConfig();}
}

5.3 MinioController
upload上传文件接口:传入参数bucket,文件保存到minio后会返回fileName。

getUrl获取文件访问链接接口:传入参数path和bucket,返回可以访问的链接(7天有效)。这里的path就是上传文件的返回值fileName。

@RequestMapping("minio")
@RestController
public class MinioController {@Resourceprivate MinioClient minioClient;@PostMapping(value = "upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public String upload(@RequestPart("file") MultipartFile file,@RequestParam("bucket") String bucket) {try {int idx = Objects.requireNonNull(file.getOriginalFilename()).lastIndexOf(".");String suffix = file.getOriginalFilename().substring(idx + 1);String fileName = UuidUtils.generateUuid() + "." + suffix;// 保存文件minioClient.putObject(PutObjectArgs.builder().stream(file.getInputStream(), file.getSize(), PutObjectArgs.MIN_MULTIPART_SIZE).object(fileName).contentType(file.getContentType()).bucket(bucket).build());return fileName;} catch (Exception e) {e.printStackTrace();return "";}}@GetMapping("getUrl")public String getUrl(@RequestParam(name = "path") String path,@RequestParam("bucket") String bucket) {try {// 获取文件访问地址 7天失效String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucket).object(path).method(Method.GET).expiry(7, TimeUnit.DAYS).build());return url;} catch (Exception e) {e.printStackTrace();return "";}}
}

5.4 okhttp3版本不兼容
如果出现okhttp3版本不兼容的问题,需要在pom.xml的properties节点下加上版本号,如下:

<okhttp3.version>4.8.1 </okhttp3.version>

1、删除自动恢复
可以测试删除其中一半的存放位置,它过一会儿就自动恢复了,比如删除data0和data1,几分钟它就自动重新创建了文件,并且里面的内容也恢复了。
在这里插入图片描述

2、文件夹
上传的单个文件变成了文件夹

在这里插入图片描述
3 分块存储
点击到里面单个文件被拆分成了许多个小块
在这里插入图片描述

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

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

相关文章

WSGI与ASGI:两种Python Web服务器网关接口的比较

在当今的Web开发领域&#xff0c;选择合适的服务器网关接口&#xff08;Server Gateway Interface&#xff0c;简称SGI&#xff09;对于提高Web应用程序的性能和并发性至关重要。在Python中&#xff0c;有两种常见的SGI&#xff1a;WSGI和ASGI。本文将深入探讨这两种SGI的异同点…

通过51单片机控制SG90舵机按角度正反转转动

一、前言 本文介绍如何通过51单片机控制SG90舵机实现角度的正反转转动。SG90舵机是一种常用的微型舵机&#xff0c;具有体积小、重量轻、结构简单等特点&#xff0c;被广泛应用于机器人、遥控模型和各种自动控制系统中。 使用51单片机&#xff08;STC89C52&#xff09;作为控…

变压器试验VR虚拟仿真操作培训提升受训者技能水平

VR电气设备安装模拟仿真实训系统是一种利用虚拟现实技术来模拟电气设备安装过程的培训系统。它能够为学员提供一个真实、安全、高效的学习环境&#xff0c;帮助他们更好地掌握电气设备的安装技能。 华锐视点采用VR虚拟现实技术、MR混合现实技术、虚拟仿真技术、三维建模技术、人…

ubuntu22.04桌面版系统无法识别USB摄像头

虚拟机连接电脑摄像头连接失败&#xff08;驱动程序错误&#xff09; 本文为转载&#xff1a;版权归远作者所有&#xff0c;之所以转载是为了避免被原作者删除 巴黎铁塔下的女孩 你尽管努力&#xff0c;剩下的交给时间 虚拟机调用电脑的摄像头&#xff0c;正常情况下只需点击…

3.5、Linux:命令行git的使用

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 在Linux Centos7.6下安装git yum -y install git 注册一个gitee账号 进去注册就好&#xff0c;记住自己的用户名和密码。 创建一个仓库 点击复制&#xff0c;接着就可以在Linux上使用了 git clone git clone 刚才复制的地…

el-select多选以tag展示时,超过显示长度以...省略号显示,且在一行展示

效果&#xff1a; 代码&#xff1a; <span>系统词典维度&#xff1a;</span><el-selectv-model"dNum"placeholder"请选择"multiplecollapse-tags //设置collapse-tags属性将它们合并为一段文字size"small"style"width:160p…

Python模块导入出现ModuleNotFoundError: No module named ‘***’解决方法

概述 几年没弄python了&#xff0c;全部还会给老师&#xff0c;今天弄了个demo&#xff0c;老是报错&#xff0c;在此记录下&#xff0c;方便后续查阅。 环境&#xff1a;Windows10 开发IDEA&#xff1a;PyCharm 2023.1.3 1、报错如下所示 2、解决方法&#xff1a;安装execjs…

第十一章《搞懂算法:聚类是怎么回事》笔记

聚类是机器学习中一种重要的无监督算法&#xff0c;可以将数据点归结为一系列的特定组合。归为一类的数据点具有相同的特性&#xff0c;而不同类别的数据点则具有各不相同的属性。 11.1 聚类算法介绍 人们将物理或抽象对象的集合分成由类似 的对象组成的多个类的过程被称为聚…

技术干货 | GreatDB新一代读写分离架构,如何炼就近乎0损耗的性能?

优化数据库性能并降低成本是每位架构师和DBA都必须面对的挑战。其中&#xff0c;读写分离是一种常见方法&#xff1a;即通过将读操作和写操作分发到不同的数据库实例&#xff0c;实现多副本负载和性能提升。 传统的中间件方案&#xff0c;例如基于Proxysql、HAProxy、MySQL Ro…

学习笔记:CANOE模拟LIN主节点和实际从节点进行通信测试

先写点感想&#xff0c;在LIN开发阶段&#xff0c;我一般用图莫斯USB工具来进行模拟主机节点发送数据。后来公司买了CANOE工具就边学习边搭建了LIN的测试工程&#xff0c;网上的资料真的很少&#xff0c;主要是靠自己一点点摸索前进&#xff0c;总算入门。几个月后的今天&#…

计算机网络第4章-网络层(1)

引子 网络层能够被分解为两个相互作用的部分&#xff1a; 数据平面和控制平面。 网络层概述 路由器具有截断的协议栈&#xff0c;即没有网络层以上的部分。 如下图所示&#xff0c;是一个简单网络&#xff1a; 转发和路由选择&#xff1a;数据平面和控制平面 网络层的作用…

Python语言高级实战-内置函数super()的使用之类的单继承(附源码和实现效果)

实现功能 super()是一个内置函数&#xff0c;用于调用父类的方法。super() 是用来解决多重继承问题的&#xff0c;直接用类名调用父类方法在使用单继承的时候没问题&#xff0c;但是如果使用多继承&#xff0c;会涉及到查找顺序&#xff08;MRO&#xff09;、重复调用&#xf…

gitlab数据备份和恢复

gitlab数据备份 sudo gitlab-rake gitlab:backup:create备份文件默认存放在/var/opt/gitlab/backups路径下&#xff0c; 生成1697101003_2023_10_12_12.0.3-ee_gitlab_backup.tar 文件 gitlab数据恢复 sudo gitlab-rake gitlab:backup:restore BACKUP1697101003_2023_10_12_…

SAP-MM-查找采购订单的创建和修改日期

在采购订单页面可以查看采购订单的修改和创建&#xff0c;但是有些内容不能完成看到 例如这个订单显示是用户唐创建&#xff0c;但是他不记得是什么时候创建的&#xff0c;怎么创建的&#xff1f; 点击菜单-环境-表头更改、项目更改&#xff0c;可以查看更改内容 通过这个表可…

蓝桥杯每日一题2023.11.6

取位数 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 由题意我们知道len中为现阶段长度&#xff0c;如果其与k相等也就是找到了正确的位数&#xff0c;否则就调用递归来进行搜索&#xff0c;每次搜索一位数。 #include <stdio.h> // 求x用10进制表示时的数位长度 int …

Zibll子比主题开心版 v7.4.2 不限域名无限搭建

Zibll子比主题是国内一款相对良心&#xff0c;更新也很不错的一款wordpress主题。专为博客、自媒体、资讯类的网站设计开发&#xff0c;简约优雅的设计风格&#xff0c;全面的前端用户功能&#xff0c;简单的模块化配置&#xff0c;欢迎您的体验。 资源入口点击进入 版本说明 新…

IntelliJ IDEA 2022创建Maven项目

IntelliJ IDEA 2022创建Maven项目 点击New Project 配置一下下 (1). 选择Maven Archetype (2). 输入Name就是你的项目名称 (3). 输入Location是你的项目保存目录 (4). 选择JDK (5). 选择Catalog一般默认选择Internal即可 在Archetype这里我们选择一个模板来创建Maven项目 …

什么是Kubernetes RBAC?为什么需要它?

目录 什么是Kubernetes RBAC? 如何启用Kubernetes RBAC 1.服务帐户 2.角色和集群角色 3.角色绑定和集群角色绑定 Kubernetes RBAC的好处 1.适当的授权 2.职责分离 3.100%遵守法规 Kubernetes RBAC的缺点 企业软件开发工具 什么是Kubernetes RBAC? 当组织开始走上…

【原理篇】二、Bean加载控制

文章目录 1、编程式Bean加载控制2、注解式Bean加载控制3、Conditional派生注解4、Bean依赖的属性配置 Bean的加载控制指根据特定情况对bean进行选择性加载以达到适用于项目的目标 上篇Bean声明的方式中&#xff0c;后4种可以实现对Bean加载的控制&#xff0c;分别是&#xff1a…

AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…