MinIO安装、与SpringBoot整合、常见方法

系统学习:若依框架(整合了MinIO)介绍 | RuoYi

MinIO

MinIO是一个高性能的对象存储系统,专为大规模数据存储、管理和访问而设计。以下是关于MinIO的详细解析:

1. 基本概念

  • 定义:MinIO是一个基于Amazon S3兼容协议的开源对象存储服务器,使用Go语言编写,支持跨平台的分布式存储架构。
  • 用途:用于存储和管理非结构化数据,如图片、视频、日志文件等,尤其适合大规模数据分析和云原生应用程序的存储需求。

2. 主要特性

  1. 高性能
    • MinIO采用分布式的架构设计,将数据分散存储在多个节点上,实现并行处理和高速传输。
    • 通过优化的I/O路径和并发设计,确保数据读写操作的高速执行,即使在高负载情况下也能维持稳定的吞吐量。
    • 在普通服务器上也能达到接近硬件极限的存储性能,为PB级数据的存储与处理提供强大支撑。
  2. 可扩展性
    • 分布式架构允许用户根据需求部署多个节点,形成分布式存储集群,横向扩展存储容量和处理能力。
    • 通过添加新的节点,用户可以线性地扩展MinIO集群的存储容量和吞吐量。
  3. 数据保护
    • 提供多种数据保护机制,包括数据冗余、故障转移和数据校验等。
    • 使用分布式的冗余机制将数据复制到多个节点上,防止数据丢失。
    • 支持跨节点的数据复制或纠删码技术,确保数据在不同地理位置的多个副本,实现高可用性和数据持久性。
  4. S3兼容性
    • 使用S3兼容的API,与现有的S3生态系统无缝集成。
    • 允许用户直接使用现有的S3工具和应用程序与MinIO进行集成。
  5. 易用性
    • 提供超简单的安装步骤、直观的管理界面以及平滑的扩展能力,降低企业构建复杂数据架构的门槛。
    • 支持多种扩展方式,如分布式存储、数据备份等,满足不同用户的需求。

3. 应用场景

  • 云原生应用程序的存储:作为云原生应用程序的对象存储后端,与Kubernetes集成,提供持久性存储和数据共享。
  • 大规模数据分析:用于存储和分析大规模的数据集,与大数据处理框架(如Apache Spark和Apache Hadoop)集成。
  • 备份和灾难恢复:作为备份和灾难恢复解决方案,支持数据冗余和高可用性,确保数据的安全性和可靠性。
  • 多媒体存储和分发:用于存储和分发多媒体内容,如图片、视频和音频文件,与内容分发网络(CDN)集成。
  • IoT数据存储和分析:用于存储和分析大规模的物联网(IoT)数据,处理来自传感器和设备的实时数据。

4. 架构设计

  • 分布式架构:将数据分散存储在多个节点上,提供更高的可扩展性和可靠性。
  • S3兼容的API:使用S3接口提供简单、灵活的数据访问方式,支持HTTP协议直接上传、下载和管理对象。

5. 部署与集成

  • 部署:可以部署在云端、边缘计算环境或本地服务器上,展现高适配性和灵活性。
  • 集成:支持多种平台(如Windows、Linux、OS X和FreeBSD),可以与现有的系统和应用程序无缝集成。

MinIO安装

  1. 下载MinIO
    • Windows系统:从MinIO的官方网站(https://min.io/download)下载对应版本的MinIO。
    • Linux系统:可以使用wget命令从MinIO的服务器下载,例如wget https://dl.min.io/server/minio/release/linux-amd64/minio
  2. 修改文件执行权限(Linux)
    • 使用chmod +x minio命令为下载的MinIO文件添加执行权限。
  3. 启动MinIO
    • Windows系统:打开cmd面板,进入MinIO所在目录,执行启动命令,例如minio.exe server D:\miniodata
    • Linux系统:在终端中执行启动命令,如./minio server /data/miniodata。可以指定访问密钥和秘密密钥,如MINIO_ACCESS_KEY=myminioadmin MINIO_SECRET_KEY=myminioadmin ./minio server /data/miniodata
  4. 访问MinIO Web界面
    • 根据启动命令中指定的端口(默认为9000),在浏览器中输入地址http://localhost:9000来访问MinIO的Web界面。
    • 登录密码,若未设置都为minioadmin

Window系统下设置用户名和密码:

  • setx MINIO_ROOT_USER name #name改为想设置的用户名
  • setx MINIO_ROOT_PASSWORD password #password改为想设置登录密码

 MinIO与SpringBoot整合

  • 添加Maven依赖
    • 在SpringBoot项目的pom.xml文件中添加MinIO客户端的Maven依赖,以及可能需要的其他依赖,如fastjson等。
<dependency>  
    <groupId>io.minio</groupId>  
    <artifactId>minio</artifactId>  
    <version>8.2.2</version>  
</dependency>  
<!-- 其他依赖如okhttp和fastjson(如果版本需要) -->
  • 配置MinIO连接信息
    • 在SpringBoot项目的application.properties或application.yml文件中配置MinIO的连接信息,包括服务器地址、端口、访问密钥和秘密密钥等。
# application.yml 示例  
minio:  
  endpoint: 127.0.0.1:9000  
  accessKey: minioadmin  
  secretKey: minioadmin  
  • 编写代码整合MinIO
    • 在SpringBoot项目中编写Java代码来与MinIO进行交互,如创建桶、上传文件、下载文件等。这通常涉及到使用MinIO客户端提供的API。
//上传
    public SysOssVo upload(MultipartFile file) {
        String originalfileName = file.getOriginalFilename();
        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
        OssClient storage = OssFactory.instance();
        UploadResult uploadResult;
        try {
            uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
        } catch (IOException e) {
            throw new ServiceException(e.getMessage());
        }
        // 保存文件信息
        SysOss oss = new SysOss();
        oss.setUrl(uploadResult.getUrl());
        oss.setFileSuffix(suffix);
        oss.setFileName(uploadResult.getFilename());
        oss.setOriginalName(originalfileName);
        oss.setService(storage.getConfigKey());
        baseMapper.insert(oss);
        SysOssVo sysOssVo = new SysOssVo();
        BeanCopyUtils.copy(oss, sysOssVo);
        return this.matchingUrl(sysOssVo);
    }
//下载
    public void download(Long ossId, HttpServletResponse response) throws IOException {
        SysOssVo sysOss = SpringUtils.getAopProxy(this).getById(ossId);
        if (ObjectUtil.isNull(sysOss)) {
            throw new ServiceException("文件数据不存在!");
        }
        FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName());
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
        OssClient storage = OssFactory.instance();
        try(InputStream inputStream = storage.getObjectContent(sysOss.getUrl())) {
            int available = inputStream.available();
            IoUtil.copy(inputStream, response.getOutputStream(), available);
            response.setContentLength(available);
        } catch (Exception e) {
            throw new ServiceException(e.getMessage());
        }
    }
//删除
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if (isValid) {
            // 做一些业务上的校验,判断是否需要校验
        }
        List<SysOss> list = baseMapper.selectBatchIds(ids);
        for (SysOss sysOss : list) {
            OssClient storage = OssFactory.instance(sysOss.getService());
            storage.delete(sysOss.getUrl());
        }
        return baseMapper.deleteBatchIds(ids) > 0;
    }

常见API

存储桶(Bucket)操作
  1. bucketExists:
    • 功能:判断指定的存储桶(Bucket)是否存在。
    • 参数:BucketExistsArgs构建器模式,需要指定bucket名称。
    • 返回值:布尔值,表示存储桶是否存在。
  2. makeBucket:
    • 功能:创建一个新的存储桶(Bucket)。
    • 参数:MakeBucketArgs构建器模式,需要指定bucket名称,也可以设置存储桶的存储类、区域等属性。
    • 返回值:无返回值,但创建失败会抛出异常。
对象(Object)操作
  1. putObject:
    • 功能:上传一个对象到指定的存储桶中。
    • 参数:包括存储桶名称、对象名称、输入流(如文件流)以及可选的元数据等。
    • 返回值:无返回值,但上传成功或失败会抛出相应的异常。
  2. getObject:
    • 功能:从指定的存储桶中下载一个对象。
    • 参数:包括存储桶名称、对象名称以及可选的下载参数(如版本号、范围等)。
    • 返回值:返回对象的内容作为输入流。
  3. listObjects:
    • 功能:列出指定存储桶中的对象列表。
    • 参数:包括存储桶名称、可选的前缀、标记和限制等参数。
    • 返回值:返回一个包含对象列表的迭代器或结果集。
  4. copyObject:
    • 功能:在存储桶内部或不同存储桶之间复制对象。
    • 参数:包括源存储桶名称、源对象名称、目标存储桶名称和目标对象名称等。
    • 返回值:无返回值,但复制成功或失败会抛出相应的异常。
  5. removeObject:
    • 功能:删除指定的对象。
    • 参数:包括存储桶名称和对象名称。
    • 返回值:无返回值,但删除成功或失败会抛出相应的异常。
其他操作
  1. getPresignedObjectUrl:
    • 功能:生成一个带有签名和有效期的URL,允许用户在限定时间内访问指定的对象。
    • 参数:包括存储桶名称、对象名称、有效期等参数。
    • 返回值:返回一个带有签名的URL字符串。
  2. getPresignedPostFormData:
    • 功能:生成一个表单数据,用于通过POST请求上传对象到指定的存储桶中。
    • 参数:包括存储桶名称、对象名称、表单字段等参数。
    • 返回值:返回一个包含表单数据的Map或类似结构。
注意事项
  • 所有的API操作都需要通过MinIOClient实例进行调用,而MinIOClient的初始化需要指定MinIO服务器的访问地址、访问密钥和密钥签名等信息。
  • 在使用API时,需要注意异常处理,以便在发生错误时能够及时处理和恢复。
  • MinIO的API支持多种编程语言和SDK,如Java、Python、JavaScript等,可以根据实际需求选择适合的SDK进行开发。

OSS(Object Storage Service)

OSS(Object Storage Service)常见方法主要围绕其存储、管理和访问对象(Object)的操作。以下是根据参考文章和相关资料整理的OSS常见方法,以清晰的结构进行归纳:

  1. 创建存储空间(Bucket)
    • 步骤:登录OSS控制台,选择区域并创建Bucket。
    • 特点:存储空间是OSS中用于存储对象的最基本的容器,所有对象都必须隶属于某个存储空间。
    • 注意事项:在创建Bucket时,需要指定其名称、存储类型、访问权限等属性。
  2. 上传对象
    • 方法
      1. 使用OSS控制台上传:直接拖拽文件到控制台中上传。
      2. 使用命令行工具(如ossutil):通过命令行界面上传文件。
      3. 使用API或SDK:通过编程方式调用OSS提供的API或SDK上传文件。
    • 特点:OSS支持多种上传方式,满足不同的使用场景和需求。
  3. 下载对象
    • 方法
      1. 使用OSS控制台下载:在控制台中选择对象进行下载。
      2. 使用命令行工具(如ossutil):通过命令行界面下载文件。
      3. 使用API或SDK:通过编程方式调用OSS提供的API或SDK下载文件。
    • 特点:OSS提供灵活的下载方式,并支持断点续传等功能。
  4. 设置权限和访问控制
    • 方法
      1. 访问控制列表(ACL):为Bucket或Object设置访问权限,包括私有、公共读、公共读写等。
      2. 签名URL:生成带有签名和有效期的URL,允许用户在限定时间内访问指定的Object。
      3. RAM策略:使用阿里云资源访问管理(RAM)为用户或角色设置精细的权限控制。
    • 特点:OSS提供多层次的访问控制机制,确保数据的安全性和隐私性。
  5. 使用OSS的其他功能
    • 功能列表
      1. 数据加密:支持服务器端加密,确保数据的机密性。
      2. 数据迁移:提供数据迁移工具,方便用户将数据从其他存储系统迁移到OSS。
      3. 图片处理:支持图片格式转换、裁剪、缩放等处理操作。
      4. 数据生命周期管理:根据业务需求设置数据的存储周期和过期规则。
      5. 静态网站托管:将Bucket配置为静态网站托管点,用于托管和发布静态网页。
    • 特点:OSS提供丰富的功能,满足用户多样化的存储和管理需求。

总结来说,OSS的常见方法主要包括创建存储空间、上传和下载对象、设置权限和访问控制以及使用OSS的其他功能。这些方法共同构成了OSS的基本操作体系,为用户提供了灵活、高效、安全的对象存储服务。

 

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

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

相关文章

DY-34/60C电压继电器 带板前底座 约瑟JOSEF

系列型号&#xff1a; DY-32电压继电器&#xff1b;DY-36电压继电器&#xff1b; DY-33电压继电器&#xff1b;DY-37电压继电器&#xff1b; DY-34电压继电器&#xff1b;DY-38电压继电器&#xff1b; DY-31电压继电器&#xff1b;DY-35电压继电器&#xff1b; DY-32/60C电…

定时器介绍之8253芯片

目录 定时器简介 8253功能介绍 组成 工作原理 相关引脚 启动方法 计数方式 实现 读取计数值 定时器简介 8253功能介绍 内部结构 相关引脚 计数器组成 工作原理 启动方法 计数方式 初始化&#xff1a;写入控制字——>写入计数初值 实现 计数长度选择&#xff1a…

1832javaERP管理系统之实践教学管理Myeclipse开发mysql数据库servlet结构java编程计算机网页项目

一、源码特点 java erp管理系统之实践教学管理是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了servlet设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

7.无代码爬虫八爪鱼采集器软件——采集规则/项目的创建与网址输入

接上篇 6.零代码网页爬虫软件基础实操——下载与安装八爪鱼采集器 八爪鱼免费爬虫软件下载&#xff1a; 八爪鱼采集器下载 小白数据采集神器​​https://affiliate.bazhuayu.com/retrieve 直接复制粘贴要采集的网站在这里就可以进入采集规则的设计器 自定义任务 通过这个功能…

hipcc 编译 amd gpu kernel 和 打包与解包的流程实验

1, hip cuda kernel 编译概观 编译的文件流&#xff1a; .hip kernel --(clang)--> .o .o --(lld)--> .out .out --(clang-offload-bundler)--> .hipfb 2&#xff0c;示例 hipcc -#…

Ubuntu20.04中复现FoundationPose

Ubuntu20.04中复现FoundationPose 文章目录 Ubuntu20.04中复现FoundationPose1.安装cuda和cudnn2.下载相关资源3.环境配置4.运行model-based demo5.运行ycbv demoReference &#x1f680; 非常重要的环境配置 &#x1f680; ubuntu 20.04cuda 11.8.0cudnn v8.9.7python 3.9.19…

windows如何查看硬盘类型(查看磁盘类型)(查看是固态硬盘ssd还是机械硬盘hdd)(Windows优化驱动器——媒体类型)

文章目录 方法&#xff1a;使用Windows优化驱动器1、在任务栏搜索框中输入“优化驱动器”并打开它。2、在优化驱动器的窗口中&#xff0c;查看每个驱动器旁边的“媒体类型”。3、如果列出的是“固态驱动器”&#xff0c;那么它是SSD&#xff1b;如果是“硬盘驱动器”&#xff0…

Python MongoDB 基本操作

本文内容主要为使用Python 对Mongodb数据库的一些基本操作整理。 目录 安装类库 操作实例 引用类库 连接服务器 连接数据库 添加文档 添加单条 批量添加 查询文档 查询所有文档 查询部分文档 使用id查询 统计查询 排序 分页查询 更新文档 update_one方法 upd…

windows系统把桌面的文件重定向到电脑的其他分区盘

当我们使用windows系统的电脑时&#xff0c;很喜欢把一些常用的文件放到桌面上。而桌面上的文件默认都是设定在C盘下的。时间长了&#xff0c;C盘容易爆红(空间不足)。下面我将介绍一种比较简单快捷的办法来解决这种问题--就是把桌面的文件重定向到电脑的其他分区盘。 首先我们…

kafka在windows上的启动

启动zookeeper 解压kafka安装包到对应目录下&#xff0c;找到对应config目录下的zookeeper.properties文件 新建一个data文件夹&#xff0c;随便放哪 打开该文件&#xff0c;找到 dataDir/tmp/zookeeper 属性 将原来的属性值&#xff0c;修改为新建data文件夹地址&#xff0c;…

关于生成式人工智能的发展

近年来&#xff0c;人工智能的发展引起了广泛关注&#xff0c;尤其是在深度学习领域&#xff0c;以深度神经网络为代表的人工智能技术已经取得了重大突破。然而&#xff0c;深度神经网络也有其局限性。深度学习技术在处理一些复杂问题时表现良好&#xff0c;但在解决更广泛的任…

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

前言 第一次使用海康视觉算法平台VisionMaster 4.3.0&#xff0c;项目中要使用这个平台进行视觉处理并获取结果。 运行效果 开发环境 C#&#xff0c; WPF&#xff0c; vs2022, 海康视觉算法平台VisionMaster 4.3.0 基本概念 上图这些.sol为后缀的是vm的方案文件。 打开方案文…

台灯护眼是真的吗?家长挑选台灯看这篇!

中国当前正面临着日益严峻的近视防控挑战。随着各学段学生近视率的普遍偏高&#xff0c;以及高度近视占比的不断上升&#xff0c;这一问题已经对学生的身体健康构成了严重威胁&#xff0c;并对国家的未来发展和社会稳定构成了潜在风险。随着教育资源的日益丰富和普及&#xff0…

俄罗斯方块小游戏(附源码)

游戏展示 一.导包 import turtle import random 二.定义一个Block类 定义一个Block类&#xff0c;用于表示游戏中的方块&#xff0c;包含颜色和形状。 class Block:def __init__(self, color, tiles):self.color colorself.tiles tiles三.定义了7个不同的Block对象 定义了7…

散户必须知道!个股场外期权期限是什么?

今天带你了解散户必须知道&#xff01;个股场外期权期限是什么&#xff1f;场外个股期权是一种交易双方买卖未来某个时间以某个价格购买或卖出某种资产的权力&#xff0c;允许投资者以相对较小的期权费用获得名义本金&#xff0c;以获取更高的回报。 个股场外期权期限是什么&am…

MySQL之优化服务器设置(六)

操作系统状态 操作系统会提供一些帮助发现操作系统和硬件正在做什么的工具。其中包括最常用的工具iostat和vmstat。如果系统不能提供它们中的任何一个&#xff0c;有可能提供了相似的替代品。当然目的不是让大家熟练使用iostat和vmstat&#xff0c;而是告诉大家用类似的工具诊…

css布局方式汇总

css布局解决方案 文章目录 css布局解决方案水平居中布局1. text-algin:center使用场景原理优点与缺点 2. margin:0 auto原理优点和缺点 3. inline-blocktext-align属性配合使用原理优点和缺点 4. table配合margin属性使用原理优点和缺点 5. absolutetransform属性的translateX原…

周跳的探测及修复

前言&#xff1a; 本章节代码均在Gitee中开源&#xff1a; 导航工程: 导航工程及其有关的所有项目 - Gitee.comhttps://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E5%91%A8%E8%B7%B3%E6%8E%A2%E6%B5%…

Excel批量一列转多列多行

你在公司或学校是否遇到过对人员进行分组&#xff0c;你是否曾一个一个复制粘贴&#xff0c;如只有100人&#xff0c;尚有时间一一分组&#xff0c;如1000人&#xff0c;甚至更多&#xff0c;不知分到“地老天荒”是否可以完成&#xff01; 今天刘小生分享一个方法“用替换等号…

OZON爆款新品推荐丨OZON珠宝首饰好款推荐

在OZON平台上&#xff0c;珠宝首饰一直以其独特的魅力和精致的工艺吸引着广大消费者。以下是几款推荐的OZON珠宝首饰好款&#xff1a; Top1 隐形树藤项链 MARIOLA Ювелирное колье серебро 925 леска невидимка женское сере…