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

news2024/10/7 15:25:55

系统学习:若依框架(整合了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.coloradmin.cn/o/1830577.html

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

相关文章

永久删除的文件如何恢复?记好这4个方法,轻松恢复文件!

“在清理电脑时&#xff0c;我一不小心把一些还需要的文件永久删除了&#xff0c;不知道大家有没有方法可以恢复这些文件呢&#xff1f;” 在数字时代&#xff0c;我们的生活和工作几乎都离不开电脑和各类存储设备。然而&#xff0c;随着数据的不断增长&#xff0c;误删文件、格…

用Python分析《三国演义》中的人物关系网

用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一&#xff0c;它以东汉末年到晋朝统一之间的历史为背景&#xff0c;讲述了魏、蜀、吴三国之间…

哪个牌子充电宝好用?精选四大热门款充电宝品牌!公认好用

在当今快节奏的生活中&#xff0c;充电宝已经成为了我们日常生活中不可或缺的数码伴侣。无论是旅行、出差还是日常通勤&#xff0c;拥有一款好用的充电宝&#xff0c;能够确保我们的手机、平板等设备随时保持充足电量。然而&#xff0c;市场上充电宝品牌繁多&#xff0c;如何选…

JavaWeb之初识Tomcat

Tomcat 轻量级应用服务器、JSP、Servlet Tomcat目录结构 在IDEA中创建web项目 在这里不使用maven构建项目&#xff0c;这种方式后面会更新 新建一个java项目File -> Project Settings -> Facets -> -> Web -> OK ( 此时src目录下有一个web目录 )Edit ->…

IDEA 设置主题、背景图片、背景颜色

一、设置主题 1、点击菜单 File -> Settings : 点击 Settings 菜单 2、点击 Editor -> Color Scheme -> Scheme, 小哈的 IDEA 版本号为 2022.2.3 , 官方默认提供了 4 种主题&#xff1a; Classic Light &#xff08;经典白&#xff09; ;Darcula &#xff08;暗黑主…

【GD32F303红枫派使用手册】第十七节 USART-中断串口收发实验

17.1 实验内容 通过本实验主要学习以下内容&#xff1a; 使用中断进行串口收发 17.2 实验原理 前面章节中我们已经学习了串口的状态标志位&#xff0c;本实验就是使用TBE中断和RBNE中断来实现中断收发数据&#xff0c;实验原理是RBNE中断用来接受数据&#xff0c;IDLE中断用…

2024 年最新 windows 操作系统部署安装 redis 数据库详细教程(更新中)

Redis 数据库概述 Redis 是一个开源的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中介。Redis&#xff08;Remote Dictionary Server &#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基…

Vmess协议是什么意思? VLESS与VMess有什么区别?

VMess 是一个基于 TCP 的加密传输协议&#xff0c;所有数据使用 TCP 传输&#xff0c;是由 V2Ray 原创并使用于 V2Ray 的加密传输协议&#xff0c;它分为入站和出站两部分&#xff0c;其作用是帮助客户端跟服务器之间建立通信。在 V2Ray 上客户端与服务器的通信主要是通过 VMes…

vue3中如何使用pinia -- pinia使用教程(一)

vue3中如何使用pinia -- pinia使用教程&#xff08;一&#xff09; 安装使用创建 store使用 store访问修改 store 使用组合式 api 创建 store -- setup storepinia 和 hook 的完美结合如何解决上面的问题 使用 hook 管理全局状态和 pinia 有何优缺点&#xff1f;参考小结 pinia…

基于springboot+vue的供应商管理系统

一、系统架构 前端&#xff1a;vue2 | element-ui 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. 员工注册 02. 登录 03. 管理员-首页 04. 管理员-个人中心-修改密码 05. …

CSP-J/S初赛01 计算机基础知识:计算机概述和计算机硬件系统

第1节 计算机概述 1.1 计算机的发展 代别 年代 逻辑&#xff08;电子&#xff09;元件 第一代 1946&#xff0d;1958 真空电子管 第二代 1959&#xff0d;1964 晶体管 第三代 1965&#xff0d;1970 集成电路 第四代 1971&#xff0d;至今 大规模、超大规模集成电…

华为 HarmonyOS 中国市场份额一季度超越苹果 iOS

华为 HarmonyOS 中国市场份额一季度超越苹果 iOS 根据最新发布的数据&#xff0c;研究机构Counterpoint Research指出&#xff0c;在2024年第一季度&#xff0c;华为的操作系统HarmonyOS在中国市场超越了苹果的iOS&#xff0c;成为中国市场上的第二大操作系统。 ![在这里插入…

Oracle 系列数据库使用 listagg去重,删除重复数据的几种方法

listagg聚合之后很多重复数据&#xff0c;下面是解决重复数据问题 案例表 create table "dept_tag_info" ( "tag_id" bigint not null, "tag_code" varchar(200), "tag_name" varchar(500), "tag_level" varchar(200), &…

解决ubuntu22.04共享文件夹问题

刚开机发现ubuntu里面的共享文件夹访问不了了 ubuntuwxy:/mnt/hgfs$ ls找了几篇博客&#xff0c;设置如下指令即可&#xff0c;记得退出当前目录重新进入刷新一下 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o uid1000 仅供参考

数据库入门知识点

目录 常见简答问题 数据库系统概述 1.数据库基本概念 2.数据库系统的特点 3.DBMS 的主要功能? 4.数据库系统组成 5.数据库的三级模式定义 6.数据库两级映像的作用? 信息与数据模型 1.信息的三种世界是什么?彼此之间的联系是什么? 2.数据模型的三个要素: 3.数据库…

VL53L4CD TOF开发(4)----单次测量(One-Shot)模式

VL53L4CD TOF开发.4--单次测量&#xff08;One-Shot&#xff09;模式 概述视频教学样品申请完整代码下载实现demo硬件准备技术规格系统框图应用示意图生成STM32CUBEMX选择MCU串口配置IIC配置 XSHUTGPIO1X-CUBE-TOF1app_tof.c详细解释主程序演示结果 概述 最近在弄ST和瑞萨RA的…

展会预热|邀您共赴2024华南国际工业展览会

展会预告 在数字化转型的浪潮中&#xff0c;广东盘古信息科技股份有限公司&#xff08;以下简称“盘古信息”&#xff09;作为工业软件业内的领军企业&#xff0c;为制造企业提供全面的数字化生产制造运营管理系统及系统集成解决方案。我们将于2024年6月19日至21日亮相华南工博…

Nuxt3 实战 (九):使用 Supabase 实现 Github 认证鉴权

前言 Supabase 使用的是 postgresql 的 Row Level Security (RLS)&#xff0c;可以限制不同用户对同一张表的不同数据行的访问权限。这种安全机制可以确保只有授权用户才能访问其所需要的数据行&#xff0c;保护敏感数据免受未授权的访问和操作。 Auth Providers 打开 Supab…

图知识蒸馏综述:算法分类与应用分析

源自&#xff1a;软件学报 作者&#xff1a;陈哲涵 黎学臻 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 图数据, 如引文网络, 社交网络和交通网络, 广泛地存在现实生活中. 图神经网络凭借强大的表现力受到广泛…

5月70城房价:一线城市新建房价格唯上海反弹 二手房全线降幅扩大 M1下行的根源:地方政府压降债务

5月份&#xff0c;一线城市新建商品住宅销售价格同比下降3.2%&#xff0c;降幅比上月扩大0.7个百分点。其中&#xff0c;北京、广州和深圳分别下降1.8%、8.3%和7.4%&#xff0c;上海上涨4.5%。 2024年5月份&#xff0c;70个大中城市中&#xff0c;各线城市商品住宅销售价格环比…