文章目录

  • 前言
  • 一、前提简介
    • 1、什么是对象存储?
    • 2、什么是MinIO?
      • 2.1 minIO特性
  • 二、安装使用MinIO
  • 三、简单在springboot中使用
    • 导入依赖
    • 在yam或者yaml文件中配置
    • 上代码

前言

使用minio进行文件上传


一、前提简介

1、什么是对象存储?

阿里云OSS解释:
对象存储服务OSS(Object Storage Service)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

对象存储最大的优势就在于它可以存储大容量的非结构化数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。对于大多数的企业来说,这可以说是最为理想的存储媒介了。

对于业务已在公有云上的企业来说,使用公有云提供的 OSS 服务,可以很好的节省存储的成本,且一般都提供易接入的 SDK,以阿里云的OSS 服务为例,在存储介质的上层封装可标注的 RESTful API 接口,使用起来十分方便。

但是对于一些没有选择业务上云或者想要下云的企业来说,要使用公有云的 OSS,在公网带宽方面就需要有一定的投入,毕竟需要通过公网传输,带宽太小,传输速度就会慢,且在传输过程中数据的安全性和完整性也有损失的风险,走专线的费用又十分昂贵,不实在。

这种情况下,MinIO 就是一个不错的选择,麻雀虽小,五脏俱全,企业可以以此快速构建自己内部的对象存储服务。(可以简单的认为MinIO就是一个远程的硬盘(存储数据))

2、什么是MinIO?

Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。

它由桶(bucket,对应Windows下的文件夹),组成目录结构,桶中直接存放对象(Object,对应Windwos下的文件),桶中不能再创建通,但是要能创建文件夹 。

2.1 minIO特性

1. 高性能:
作为一款高性能存储,在标准硬件条件下,其读写速率分别可以达到 55Gb/s 和 35Gb/s。并而 MinIO 支持一个对象文件可以是任意大小,从几kb到最大5T不等。
2.可扩展:
不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并且支持跨越多个数据中心。
3.云原生:
容器化、基于K8S的编排、多租户支持。

4.Amazon S3兼容:
使用 Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK 和 AWS CLI 访问Minio服务器。

5.可对接多种后端存储:
除了Minio自己的文件系统,还支持 DAS、 JBODs、NAS、Google云存储和 Azure Blob存储。

6.SDK支持:

GO SDK: https://github.com/minio/minio-go

JavaSDK: https://github.com/minio/minio-java

PythonSDK: https://github.com/minio/minio-py

7.Lambda计算:
Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等数据库。

8.图形化界面
有操作页面。

9.功能简单:
不容易出错,快速启动。

10.支持纠删码:
MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据。

二、安装使用MinIO

1、下载minio(官网下载:https://docs.min.io/)

2、将MinIO.exe 拷贝到自己的目录下去,并创建一个data目录

3、通过命令行启动Minio : minio server ./dta

4、启动完成后,可以看到访问的路径http://127.0.0.1:9000 (浏览器中打开)

。。。(在页面中创建桶就可以了)

三、简单在springboot中使用

导入依赖

  <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>7.0.2</version></dependency>

在yam或者yaml文件中配置

# Miniio配置
minio:endpoint: 127.0.0.1       #ip地址port: 9000             #  端口号accessKey: minioadmin     #  账号secretKey: minioadmin      #  密码secure: false              #如果是true,则用的是https而不是http,默认值是truebucketName: "name"   # 桶的名字configDir: "/data/excel"  #保存到本地的路径

上代码

 /*** 文件上传至Minio* 使用try catch finally进行上传* finally里进行资源的回收*/@Overridepublic AjaxResult upload(MultipartFile file) {InputStream inputStream = null;//创建Minio的连接对象MinioClient minioClient = getClient();//桶对象String bucketName = minioConfig.getBucketName();try {inputStream = file.getInputStream();//基于官网的内容,判断文件存储的桶是否存在 如果桶不存在就创建桶boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().build());if (exists) {System.out.println("该桶已经存在");} else {minioClient.makeBucket(MakeBucketArgs.builder().build());}/*** ================================操作文件================================* 思路:我们上传的文件是:文件.pdf* 那么我们应该上传到配置的bucket内 我们配置的bucketName是name* 那么我们存在桶里的文件应该是什么样的 也叫“文件.pdf”吗?* 应该按照上传的年月日进行区分* 举例:2021-05-05日进行上传的* 那么存在桶里的路径应该是* name/2021/05/05/这个目录下* 而对于同一个文件,存在重名问题,所以我们应该利用UUID生成一个新的文件名,并拼接上 .pdf 作为文件后缀* 那么完整的路径就是 name/2021/05/05/uuid.pdf** 如果上述思路你无法理解,那么就直接存放在桶内生成uuid+.pdf即可* 即:name/uuid.pdf*///操作文件String fileName = file.getOriginalFilename();String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "")+ fileName.substring(fileName.lastIndexOf("."));PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName).bucket(bucketName).contentType(file.getContentType()).stream(file.getInputStream(), file.getSize(), -1).build();minioClient.putObject(objectArgs);//封装访问的url给前端AjaxResult ajax = AjaxResult.success();ajax.put("fileName", "/" + bucketName + "/" + objectName);//url需要进行截取ajax.put("url", minioConfig.getEndpoint() + ":" + minioConfig.getPort() + "/" + minioConfig.getBucketName() + "/" + fileName);/*** 构建返回结果集*//*** 封装需要的数据进行返回*/return ajax;} catch (Exception e) {e.printStackTrace();return AjaxResult.error("上传失败");} finally {//防止内存泄漏if (inputStream != null) {try {inputStream.close(); // 关闭流} catch (IOException e) {log.debug("inputStream close IOException:" + e.getMessage());}}}}//这个方法里面的属性用了一个配置文件实体类(minioConfig)(也就是一些minio的连接属性)
//属性自己看文档定义/*** 免费提供一个获取Minio连接的方法* 获取Minio连接* @return*/private MinioClient getClient() {MinioClient minioClient =MinioClient.builder().endpoint("http://" + minioConfig.getEndpoint() + ":" + minioConfig.getPort()).credentials(minioConfig.getAccessKey(), minioConfig.getSecretKey()).build();return minioClient;}

MinIO的简单使用相关推荐

  1. MinIO 文件服务器简单搭建

    MinIO 文件服务器简单搭建 本地安装 Minio是一个对象存储服务器,在项目中可以用来存储文件,替代本地存储或者ftp存储的功能.docker 安装 docker run --name minio ...

  2. springboot 整合minio client 简单使用 视频流展示demo

    springboot 整合minio client 简单使用 视频流展示demo 不好意思 本人没有强迫症 代码随便造 知识来源于百度,感谢百度合作伙伴以及各位网友demo的帮助 源码:https:/ ...

  3. MinIO的简单实用(一)

    一.什么是MinIO MinIO是在GNU Affero 通用公共许可证v3.0下发布的高性能对象存储.它与AmazonS3云存储服务API兼容.使用MinIO为机器学习.分析和应用程序工作负载构建高 ...

  4. SpringBoot 搭建基于 minio 的高性能存储服务

    欢迎关注方志朋的博客,回复"666"获面试宝典 什么是minio 引用官网: MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储.它与Amazon S3 ...

  5. 如何使用 minio 进行 BR 备份

    作者:懂的都懂 原文来源: https://tidb.net/blog/ada69456 1. BR 备份的支持的后端存储 From tidb doc https://docs.pingcap.com ...

  6. 分布式文件系统选型小记

    分布式文件系统选型小记 Q&A 分布式文件系统是什么? 分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,是通过 ...

  7. 基于MinIO/Deleta Lake/Dremio和Superset或Metabase搭建简单的数据湖

    数据湖架构 大多数公司都有大量的业务数据,这些数据通常孤立在各种存储系统中,包括数据库和数据仓库.为了充分利用这些数据资产,您应该将数据集中并整合到统一的数据存储中,以增强分析能力. 通过数据湖架构, ...

  8. MinIO的介绍以及简单的使用

    什么是MinIO MinIO是在GUN Affero通用公共许可证 v3.0 下发布的高性能对象存储.他与AmazonS3云存储服务API兼容.使用MinIO为机器学习,分析和应用程序数据工作负载构建 ...

  9. linux安装和简单使用minio client | mc命令

    1.安装 地址:https://dl.min.io/client/mc/release/ 这里演示amd64的系统 执行下载命令(个人喜欢将安装资源下载至/opt/local/目录下) wget  h ...

最新文章

  1. 点云配准求物体的6D姿态(转)
  2. pwn学习总结(三) —— 栈溢出经典题型整理
  3. [项目管理]团队管理中的起点:尊重
  4. 玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制
  5. 非对称加密算法之RSA算法实现
  6. linux学习之运维篇
  7. Onvif开发之Linux下gsoap的使用及移植
  8. power bi 实时_Power BI中的实时流
  9. 小米誓要全面接管你的生活!
  10. OpenResty(nginx)操作mysql的初步应用
  11. js中WINDOW对象中的location成员对象
  12. java爬取html过快,需要输入验证码
  13. 万能解压器安卓版_解压zip app下载-解压zip(手机解压缩软件)下载11.5.4 安卓版-西西软件下载...
  14. maven常用命令大全(附详细解释)
  15. 计算机硬盘数据如何恢复,怎样进行硬盘数据恢复
  16. docx文件转pdf,使用aspose words 转pdf,并且解决表格格式错乱
  17. 华为社招嵌入式软件面试_华为社招面试感受 痛苦 悲催
  18. 密评(商用密码应用安全性评估)
  19. 中国咖啡机市场运行现状调研及投资战略分析报告2022-2027年
  20. 微服务项目:尚融宝(40)(核心业务流程:申请借款额度(3))

热门文章

  1. 华为手机怎么删除桌面备忘录小工具
  2. html实践中为何还要使用css,12 为何使用Html5+CSS3
  3. 《四维全息算法》第二讲--均线维度的设定
  4. 通信中的星座图的理解
  5. 将一个三位数反序的c语言表达式,假设m是一个三位数,则写出将m的个位,十位,百位反序而成的三位数(例如:123反序为321)的C语言表达式。知道...
  6. iOS之app直接和硬件交互、wifi、红外、蓝牙、zigbee、监控摄像头相关
  7. 海外微信、支付宝、银联国际、海外信用卡及海外支付本地化
  8. audio播放与暂停
  9. css样式计数器,详细介绍CSS计数器
  10. 应用商店的ASO和搜索引擎的SEO的区别