SpringBoot 对象存储 MinIO

SpringBoot 对象存储 MinIO

1.MinIO简介

MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议,项目地址是 https://github.com/minio/minio,官网是 https://min.io。

它适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小到 1 KB,大到 5 TB 都可以支持。

国内阿里巴巴、腾讯、百度、华为、中国移动、中国联通等企业在使用 MinIO,甚至不少商业公司二次开发 MinIO 来提供商业化的云存储产品。

疑问:为什么越来越少使用 FastDFS 实现文件存储服务呢?

部署运维复杂、无官方文档、缺乏长期维护的团队、性能较差、未提供 Docker & Kubernetes 集成方案等等原因。

2. MinIO Server 安装

由于 MinIO 是 Go 写的,所以就一个运行程序,因此安装部署 MinIO 就非常简单。

文档 https://min.io/download

2.1 Linux

## 国外资源,龟速下载
## /usr/local/minio 存储目录;--console-address 是 UI 界面的端口
wget https://dl.min.io/server/minio/release/linux-amd64/minio 
chmod +x minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=admin123 ./minio server /usr/local/minio --console-address ":9001" 

2.2Docker

Linux 或 MacOS:

cd /usr/local/
mkdir minio

vi dockercompose.yml创建dockercompose.yml文件,填写内容如下

version: '3'
services:minio:image: minio/miniocontainer_name: myminioports:- "9001:9000"volumes:- /usr/local/minio/data:/data- /usr/local/minio/config:/root/.minioenvironment:MINIO_ROOT_USER: "admin"MINIO_ROOT_PASSWORD: "admin123"command: server /datarestart: always

在上面的示例中,

  1. 我们定义了一个名为minio的服务,使用minio/minio镜像。

  2. 我们将容器的9000端口映射到主机的9000端口,

具体来说,9001:9000 的格式是 <主机端口>:<容器端口>。通过这样的端口映射,可以在主机上的 9000 端口访问容器内的服务或应用程序。以便能够通过主机访问MinIO。

  1. 数据目录./data将与容器的/data目录进行挂载,这样数据可以在容器和主机之间共享。

  2. environment部分定义了MinIO的环境变量。在这个示例中,我们设置了MINIO_ROOT_USERMINIO_ROOT_PASSWORD来指定MinIO的根用户的用户名和密码。你可以根据需要进行更改。

  3. 最后,command部分指定了MinIO容器启动时运行的命令,这里是server /data,它告诉MinIO在/data目录下存储数据。

将上述内容保存到名为docker-compose.yml的文件中,并在该文件所在的目录中运行以下命令启动MinIO容器:

# 后台启动
docker-compose up -d
# docker-compose logs  yml里面的服务id     # 查看容器输出日志
docker-compose logs minio

2.3 访问 UI 界面

使用浏览器访问 http://127.0.0.1:9001 地址,访问 MinIO 内置的 UI 界面。

输入账号 admin,密码 admin123进行登录,成功进入首页。

image-20230713155304496

2.4 新建存储桶

点击 [Create Bucket] 按钮,新建一个 Bucket 存储桶,用于稍后文件的上传。

image-20230713155427660

2.5 添加 readonly 访问规则

默认配置下,访问存储桶是需要请求授权的。但是在实际场景下,我们往往希望允许直接访问,此时就需要添加一条 readonly 访问规则。

① 点击右上角的 [Configure Bucket] 设置图标,然后选择 [Access Rules] 菜单。

image-20230713155750204

2.6 上传文件

点击 [Upload] 按钮,点击 [Upload File] 选项,选择一个图片上传。

image-20230713163443915

2.7 访问文件

文件的访问地址的格式为 <http://127.0.0.1:9000/{bucket}/{name}>,注意是 9000 端口。

我们刚上传的文件 {bucket} 是 llp,{name} 是 123.png,所以最终的访问路径是 http://127.0.0.1:9000/llp/123.png。

3.Springboot整合minio

3.1引入依赖

	<dependencies><!-- 实现对 Spring MVC 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MinIO 客户端 --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.2</version></dependency></dependencies>

3.2 Minio配置类

import io.minio.MinioClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinIOConfiguration {/*** Minio 配置* @return*/@Beanpublic MinioClient minioClient() {// 创建 MinioClient 客户端return MinioClient.builder().endpoint(MinioProperties.ENDPOINT).credentials(MinioProperties.ACCESS_KEY, MinioProperties.SECRET_KEY).build();}}

application.yml

minio:# minio访问地址endpoint: http://192.168.233.202:9000# 创建的桶名bucket: llp# minio账户名accessKey: admin# minio账户密码secretKey: admin123spring:servlet:# 文件上传相关配置项multipart:max-file-size: 16MB # 单个文件大小max-request-size: 32MB # 设置总上传的文件大小

MinioProperties读取yml配置

import lombok.Data;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(value = "minio")
public class MinioProperties implements InitializingBean {private String endpoint;private String bucket;private String accessKey;private String secretKey;public static String ENDPOINT;public static String BUCKET;public static String ACCESS_KEY;public static String SECRET_KEY;@Overridepublic void afterPropertiesSet() throws Exception {ENDPOINT = endpoint;BUCKET = bucket;SECRET_KEY = secretKey;ACCESS_KEY = accessKey;}}

测试类

@RestController
@RequestMapping("/file")
public class FileController {@Resourceprivate MinioClient minioClient;/*** 上传文件*/@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) throws Exception {// 上传String path = UUID.randomUUID().toString(); // 文件名,使用 UUID 随机minioClient.putObject(PutObjectArgs.builder().bucket(MinioProperties.BUCKET) // 存储桶.object(path) // 文件名.stream(file.getInputStream(), file.getSize(), -1) // 文件内容.contentType(file.getContentType()) // 文件类型.build());// 拼接路径return String.format("%s/%s/%s", MinioProperties.ENDPOINT, MinioProperties.BUCKET, path);}/*** 删除文件*/@DeleteMapping("/delete")public String delete(@RequestParam("path") String path) throws Exception {minioClient.removeObject(RemoveObjectArgs.builder().bucket(MinioProperties.BUCKET) // 存储桶.object(path) // 文件名.build());return "success";}}

4.测试

文件上传测试

image-20230713170016575

上传成功后,我们获得了文件的访问 URL 地址,可以使用浏览器直接访问。

http://192.168.233.202:9000/llp/8028e9c9-8b22-4a57-bcdc-74eb96a585da

image-20230713170036947

同时在minio后台也可以看到上传的文件

image-20230713170316851

文件删除测试

image-20230713170805100

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

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

相关文章

在Windows Server2016上搭建Active Directory域控服务

搭建服务端 使用Windows2016数据中心版完成 1. 配置服务器角色 2. 选择服务器角色 3. 选择当前服务器4. 选择Active Directory和DNS角色5. 确认安装 6. 提升为Domain Controller域控服务器 7. 设置根域 8. 配置保护密码 9. DNS 10. NetBIOS配置 11. 指定数据文件位置 12. 确…

vue进阶-消息的订阅与发布

&#x1f4d6;vue基础学习-组件 介绍了嵌套组件间父子组件通过 props 属性进行传参。子组件传递数据给父组件通过 $emit() 返回自定义事件&#xff0c;父组件调用自定义事件接收子组件返回参数。 &#x1f4d6;vue进阶-vue-route 介绍了路由组件传参&#xff0c;两种方式&…

Springboot发送邮件

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

InstructGPT:语言模型的人类反馈指令对齐

论文标题&#xff1a;Training language models to follow instructions with human feedback论文链接&#xff1a;https://arxiv.org/abs/2203.02155论文来源&#xff1a;OpenAI 一、概述 大型语言模型&#xff08;Large language models&#xff0c;LLMs&#xff09;可以通过…

2023西南赛区ciscn -- do you like read

Attack 打开后一个商城页面 在login as admin那里有个登录页面&#xff0c;账号admin&#xff0c;密码爆破即可得到admin123 也可以在book.php?bookisbn1进行sql注入得到密码&#xff0c;这里发现是没有注入waf的 登录进来是一个Book List的管理页面&#xff0c;同时在审计源…

基于springboot的微信小程序宠物领养医院系统(源代码+数据库+10000字论文)085

基于springboot的微信小程序宠物领养医院系统(源代码数据库10000字论文)085 一、系统介绍 本项目有网页版和小程序端 本系统分为管理员、医生、用户三种角色 用户角色包含以下功能&#xff1a; 登录、注册、宠物领养、医生在线咨询、查看挂号、个人中心、密码修改、宠物寄…

【stable diffusion】保姆级入门课程-Stable diffusion(SD)介绍与安装

目录 0.学前准备 1.什么是AI绘画 2.当前主流的AI绘画工具 3.什么是SD(stable diffusion) 4.SD能做什么 1.文生图 2.图生图 3.AI换模特&#xff0c;背景 5.使用stable diffusion配置要求 6.环境配置与安装 需要注意的地方&#xff1a; 扩展知识&#xff1a; 1.pyth…

JVM运行时数据区——Java虚拟机栈

每个线程在运行时都会创建一个Java虚拟机栈&#xff0c;也是线程私有的&#xff0c;其内部包含一个个的栈帧&#xff0c;先进后出&#xff0c;对应着一个个方法的调用&#xff0c;运行完则弹出&#xff0c;所以不存在垃圾回收的问题&#xff0c;如果线程所需要的栈深度大于此线…

浅谈防火门监控系统在酒店防火安全中的重要应用

安科瑞 华楠 摘要&#xff1a;建筑防火问题已经引起人们的广泛关注&#xff0c;合理进行建筑消防设计成为了建筑设计的重要内容。防火门监控系统是建筑防火研究的新成果。对日常防火分区监控及发生火灾后对火势和有毒气体的控制起到关建作用。文章对防火门监控系统的组成和工…

vue项目中实现3D万花筒和3D文字旋转效果

一、万花筒 1、html部分 //万花筒html <div class"carousel" data-gap"368"><figure><div class"carouselItem" v-for"(item,index) in exhibitionList" :key"index"><div class"itemContent&q…

青翼科技自主研发4路AD子卡FMC137

FMC137是一款基于VITA57.4标准规范的JESD204B接口FMC子卡模块&#xff0c;该模块可以实现4路14-bit、2GSPS/2.6GSPS/3GSPS ADC采集功能。该板卡ADC器件采用ADI公司的AD9208芯片&#xff0c;&#xff0c;与ADI公司的AD9689可以实现PIN脚兼容。该ADC与FPGA的主机接口通过16通道的…

如何用smardaten无代码平台进行复杂逻辑编排?

目录 1、前言2、复杂逻辑编排是什么&#xff1f;3、服务编排-进销存&#xff08;1&#xff09;业务说明&#xff08;2&#xff09;设计说明1&#xff09;数据库设计2&#xff09;表单设计3&#xff09;列表设计4&#xff09;逻辑设计4.1 逻辑控制设计4.2 服务编排设计 4、使用体…