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";

    @Bean
    public MinioClient minioClient() {
        return new MinioClient.Builder()
                .endpoint(END_POINT)
                .credentials(USERNAME, PASSWORD)
                .build();
    }

    @Bean
    public 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 {
    @Resource
    private 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 分块存储
点击到里面单个文件被拆分成了许多个小块
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简述SVM

概述 SVM&#xff0c;即支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种常见的监督学习算法&#xff0c;用于分类和回归问题。它是一种基于统计学习理论和结构风险最小化原则的机器学习方法。 SVM的主要思想是在特征空间中找到一个最优的超平面…

网络的地址簿:Linux DNS服务的全面指南

1 dns 1.1 dns&#xff08;域名解析服务&#xff09;介绍 当访问 www.baidu.com 首先查询/etc/hosts&#xff0c;如果没有再去查询/etc/resolv.conf&#xff0c;还是没有就去查询域名服务器 关于客户端: /etc/resolv.conf ##dns指向文件 nameserver 172.25.254.20测试&…

C语言实现将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

完整代码&#xff1a; // 将一个正整数分解质因数。例如&#xff1a;输入90,打印出902*3*3*5 #include<stdio.h> //定义全局变量&#xff0c;使i可以作用于函数的递归调用中 int i2;void func(int num){//递归结束条件&#xff0c;当这个数除以最后一个它的因子时&#…

Halcon如何使用SaperaLT库连接dalsa相机

halcon安装好的时候&#xff0c;没有带SaperaLT的采集库&#xff0c;需要额外在Halcon官网下载此库。 以下是halcon官网下载此库的链接。官网需要注册才可以下载。 https://www.mvtec.com/downloads/interfaces?tx_mvtecproduct_extensiondownloadlist%5Bfilter%5D%5B0%5Dma…

Linux认识协议

目录 TCP协议通信流程TCP三次握手数据传输过程四次挥手过程TCP 和 UDP 对比 认识协议协议的概念结构化数据的传输序列化和反序列化 网络版计算器服务端代码面向字节流 协议定制客户端代码编写代码测试守护进程守护进程创建 关于协议制定中使用现成方法实现 TCP协议通信流程 下…

【JVM】JDBC案例打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 打破双亲委派机制&#xff08;JDBC案例…

开发直播带货系统源码的技术要点

直播带货系统是一个复杂的技术项目&#xff0c;通常包括前端应用、后端服务器、数据库、支付集成、实时通信以及直播流处理等多个关键组件。以下是开发直播带货系统源码的技术要点&#xff1a; 实时视频流处理 一个成功的直播带货系统需要支持实时视频流的传输和处理。可以使…

【云原生】使用nginx反向代理后台多服务器

背景 随着业务发展&#xff0c; 用户访问量激增&#xff0c;单台服务器已经无法满足现有的访问压力&#xff0c;研究后需要将后台服务从原来的单台升级为多台服务器&#xff0c;那么原来的访问方式无法满足&#xff0c;所以引入nginx来代理多台服务器&#xff0c;统一请求入口…

TCP编程及基础知识

一、端口号 为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理&#xff0c;使用端口号来区分TCP端口号与UDP端口号独立端口用两个字节来表示 2byte&#xff08;65535个&#xff09; 众所周知端口&#xff1a;1~1023&#xff08;1~255之间为众所周知端口&#xff…

Ubuntu网络IP地址一直显示127.0.0.1

问题描述&#xff1a; 终端输入ip a显示127.0.0.1&#xff0c;原来类似192.168.231.1的地址不见了。 ip a 点击网络配置&#xff08;ubuntu桌面版&#xff09;&#xff0c;发现无线网络模块看不见了 正常情况应该有wired 模块&#xff0c;就是下面标红的 解决方案&#xff1a…

学为贵雅思写作备考

准确通顺&#xff0c;言之有物 两次读不懂&#xff0c;6分以下&#xff0c; 6分没有印象&#xff0c;味同嚼蜡&#xff0c;但是没错&#xff08;书面语过关&#xff09; 英语比较过关 8-9分&#xff0c;很有见地 6-7单个的句子读得懂&#xff0c;前后是贯通的、逻辑是通顺…

发现一款PDF转换成翻页电子书的网站

​随着科技的发展&#xff0c;电子书越来越受到人们的喜爱。而PDF格式的文件也越来越多地被人们使用。那么&#xff0c;如何将PDF文件转换成翻页电子书呢&#xff1f;今天就为大家推荐一款好用的PDF转翻页电子书网站。 一、网站介绍 这款网站是一款非常实用的在线转换工具&…

Devchat AI尝鲜试用:程序员开发提效利器,告别脏活累活

DevChat 简介 在当今的软件开发领域&#xff0c;程序员们每天都要面对海量的代码和复杂的任务。尽管技术不断发展&#xff0c;但程序员们依然需要花费大量时间进行重复性工作&#xff0c;如代码审查、错误排查、文档编写等。这些脏活累活不仅消耗了程序员们大量的时间和精力&am…

draw.io与项目管理——如何利用流程图工具提高项目管理效率

draw.io 是一款强大的图形绘制工具&#xff0c;用于创建各种类型的图表、流程图、组织结构图、网络图和平面设计等。它提供了丰富的绘图工具和预定义的图形库&#xff0c;使用户能够轻松创建专业水平的图形作品。 draw.io具有直观的界面和简单易用的功能&#xff0c;适合各种用…

gradle学习笔记

gradle学习笔记 一、下载安装配置环境变量二、使用gradle管理spring项目1、创建项目2、导入项目至编辑器3、打包部署4、将maven项目转为gradle项目 三、gradle介绍1、常用命令2、Gradle Wrapper包装器3、gradle进阶说明4、gradle插件 四、Groovy 简介 参考博客&#xff1a;http…

VM虚拟机逆向 --- [NCTF 2018]wcyvm 复现

文章目录 前言题目分析 前言 第四题了&#xff0c;搞定&#xff0c;算是独立完成比较多的一题&#xff0c;虽然在还原汇编的时候还是很多问题。 题目分析 代码很简单&#xff0c;就是指令很多。 opcode在unk_6021C0处&#xff0c;解密的数据在dword_6020A0处 opcode [0x08, …

原子化 CSS 真能减少体积么?

前言 最近看到这样一篇文章&#xff1a;《要喷也得先做做功课吧&#xff1f;驳Tailwind不好论》 个人觉得说的还是有一定道理的&#xff0c;就是该作者的语气态度可能稍微冲了点&#xff1a; 不过他说的确实有道理&#xff0c;如果这种原子化工具真的如评论区里那帮人说的那么…

【jvm】虚拟机栈

目录 一、背景二、栈与堆三、声明周期四、作用五、特点&#xff08;优点&#xff09;六、可能出现的异常七、设置栈内存大小八、栈的存储单位九、栈运行原理十、栈帧的内部结构10.1 说明10.2 局部变量表10.3 操作数栈10.4 动态链接10.5 方法返回地址10.6 一些附加信息 十一、代…

明御安全网关任意文件上传漏洞复现

简介 安恒信息明御安全网关(NGFW) 秉持安全可视、简单有效的理念&#xff0c;以资产为视角的全流程防御的下一代安全防护体系&#xff0c;并融合传统防火墙、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 较低版本的系统存…

淘宝API技术文档解析,从入门到实战

探索淘宝数据的奥秘&#xff0c;淘宝是目前国内最大的B2C电商平台之一&#xff0c;每天都会产生海量的数据。借助淘宝API技术文档&#xff0c;我们可以轻松地获取到这些数据&#xff0c;从而为电商运营和数据分析提供有力支持。 1.什么是淘宝API&#xff1f; 淘宝API&#xf…