Spring Boot集成MinIO的详细步骤

1. 安装MinIO

使用Docker部署MinIO
  1. 拉取MinIO镜像

docker pull minio/minio

这将从Docker Hub中获取最新的MinIO镜像。

创建目录

mkdir -p /home/minio/config
mkdir -p /home/minio/data

 这些目录将用于持久化MinIO的数据和配置文件

创建MinIO容器并运行: 

docker run -p 9000:9000 -p 9090:9090 \--net=host \--name minio \-d --restart=always \-e "MINIO_ACCESS_KEY=minioadmin" \-e "MINIO_SECRET_KEY=minioadmin" \-v /home/minio/data:/data \-v /home/minio/config:/root/.minio \minio/minio server /data --console-address ":9090" -address ":9000"
  1. 这将启动MinIO服务,使其可以通过主机的9000端口和9090端口进行访问。

  2. 登录MinIO控制台: 安装完成后,通过浏览器访问MinIO控制台,默认地址为 http://localhost:9000,使用设置的访问密钥和秘密密钥进行登录。

2. Spring Boot集成MinIO

添加依赖

pom.xml中添加以下依赖:

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version>
</dependency>
配置MinIO

application.properties中添加MinIO的配置:

minio.host=http://localhost:9000
minio.access-key=minioadmin
minio.secret-key=minioadmin
minio.bucket=test-bucket

创建MinIO配置类 

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MinioConfig {@Value("${minio.host}")private String host;@Value("${minio.access-key}")private String accessKey;@Value("${minio.secret-key}")private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(host).credentials(accessKey, secretKey).build();}
}

创建存储桶 

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;public void createBucket(String bucketName) {if (!minioClient.bucketExists(b -> b.bucket(bucketName))) {minioClient.makeBucket(m -> m.bucket(bucketName));}}
}

文件上传 

import io.minio.MinioClient;
import io.minio.PutObjectResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;@Service
public class FileUploadService {@Autowiredprivate MinioClient minioClient;public String uploadFile(MultipartFile file, String bucketName, String objectName) throws Exception {try (InputStream inputStream = file.getInputStream()) {PutObjectResponse response = minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());return "http://localhost:9000/" + bucketName + "/" + objectName;}}
}

文件下载 

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;@RestController
public class FileDownloadController {@Autowiredprivate MinioClient minioClient;@GetMapping("/download")public void downloadFile(@RequestParam String bucketName, @RequestParam String objectName, HttpServletResponse response) {try {InputStream stream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=" + objectName);stream.transferTo(response.getOutputStream());} catch (Exception e) {e.printStackTrace();}}
}

通过以上步骤,你可以在Spring Boot中成功集成并使用MinIO进行文件存储和管理。 

 

 

 

 

 

 

 

 

 

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

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

相关文章

基于PLC的停车场车位控制系统的设计

2.1 设计目标 本课题为基于PLC的停车场车位控制系统来设计&#xff0c;在此将功能确定如下&#xff1a; 针对8个车位的停车场进行设计将停车场分为入口处&#xff0c;车位处、以及出口处三个部分&#xff1b;每个车位都有指示灯指示当前位置是否空闲&#xff0c;方便司机查找空…

微服务即时通信系统---(四)框架学习

目录 ElasticSearch 介绍 安装 安装kibana ES客户端安装 头文件包含和编译时链接库 ES核心概念 索引(Index) 类型(Type) 字段(Field) 映射(mapping) 文档(document) ES对比MySQL Kibana访问ES测试 创建索引库 新增数据 查看并搜索数据 删除索引 ES…

除了 `task_type=“SEQ_CLS“`(序列分类),还有CAUSAL_LM,QUESTION_ANS

task_type="SEQ_CLS"是什么意思:QUESTION_ANS 我是qwen,不同模型是不一样的 SEQ_CLS, SEQ_2_SEQ_LM, CAUSAL_LM, TOKEN_CLS, QUESTION_ANS, FEATURE_EXTRACTION. task_type="SEQ_CLS" 通常用于自然语言处理(NLP)任务中,SEQ_CLS 是 Sequence Classif…

Android ViewPager使用预加载机制导致出现页面穿透问题

​ 缘由 在应用中使用ViewPager&#xff0c;并且设置预加载页面。结果出现了一些异常的现象。 我们有4个页面&#xff0c;分别是4个Fragment&#xff0c;暂且称为FragmentA、FragmentB、FragmentC、FragmentD&#xff0c;ViewPager在MainActivity中&#xff0c;切换时&#x…

apt3.0和apt2.0的区别

一&#xff0c;简单区别 更新方式 apt2.0&#xff1a;一次性更新所有内容&#xff0c;没有分阶段更新功能。apt3.0&#xff1a;引入分阶段更新功能&#xff0c;可分批推送更新包。 界面显示 apt2.0&#xff1a;界面简单&#xff0c;输出信息较为杂乱&#xff0c;没有彩色高亮和…

过电压保护器与传统的保护方式对比

过电压保护器主要用于保护电气设备免受大气过电压&#xff08;如雷击&#xff09;和操作过电压&#xff08;开关动作等引发&#xff09;的侵害。它通常由非线性电阻片等元件组成&#xff0c;利用其独特的伏安特性工作。正常电压下&#xff0c;保护器呈现高阻态&#xff0c;几乎…

机器学习(3)——决策树

文章目录 1. 决策树基本原理1.1. 什么是决策树&#xff1f;1.2. 决策树的基本构成&#xff1a;1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益&#xff08;ID3&#xff09;2.1.2. 基尼不纯度&#xff08;CART&#xff09;2.1.3. 均方误差&#xff08;MSE&…

充电桩领域垂直行业大模型分布式推理与训练平台建设方案 - 慧知开源充电桩平台

没有任何广告&#xff01; 充电桩领域垂直行业大模型分布式推理与训练平台建设方案 一、平台定位与核心价值 行业首个垂直化AI平台 专为充电桩运营场景设计的分布式大模型训练与推理基础设施&#xff0c;实现"算力-算法-场景"三位一体闭环管理。 核心价值主张&am…

NLP高频面试题(四十五)——PPO 算法在 RLHF 中的原理与实现详解

近端策略优化(Proximal Policy Optimization, PPO)算法是强化学习领域的一种新颖且高效的策略优化方法,在近年大规模语言模型的人类反馈强化学习(Reinforcement Learning with Human Feedback, RLHF)中发挥了关键作用。本文将以学术严谨的风格,详细阐述 PPO 算法的原理及…

C++指针和引用之区别(The Difference between C++Pointers and References)

面试题&#xff1a;C指针和引用有什么区 C指针和引用有什么区别&#xff1f; 在 C 中&#xff0c;指针和引用都是用来访问其他变量的值的方式&#xff0c;但它们之间存在一些重要的区别。了解这些区别有助于更好地理解和使用这两种工具。 01 指针 指针&#xff08;Pointer…

LWIP学习笔记

TCP/ip协议结构分层 传输层简记 TCP&#xff1a;可靠性强&#xff0c;有重传机制 UDP&#xff1a;单传机制&#xff0c;不可靠 UDP在ip层分片 TCP在传输层分包 应用层传输层网络层&#xff0c;构成LWIP内核程序&#xff1a; 链路层&#xff1b;由mac内核STM芯片的片上外设…

【经验记录贴】活用shell,提高工作效率

背景 最近在做测试的时候&#xff0c;需要手动kill服务的进程&#xff0c;然后通过命令重启服务&#xff0c;再进行测试。每次重启都会涉及到下面三个命令的执行&#xff1a; 1&#xff09;检索进程ID $ ps -eLf | grep programname root 1123 112 1234 0 0 0 0:00…

MacOS 系统下 Git 的详细安装步骤与基础设置指南

MacOS 系统下 Git 的详细安装步骤与基础设置指南—目录 一、安装 Git方法 1&#xff1a;通过 Homebrew 安装&#xff08;推荐&#xff09;方法 2&#xff1a;通过 Xcode Command Line Tools 安装方法 3&#xff1a;手动下载安装包 二、基础配置1. 设置全局用户名和邮箱2. 配置 …

一文读懂 AI

2022年11月30日&#xff0c;OpenAI发布了ChatGPT&#xff0c;2023年3月15日&#xff0c;GPT-4引发全球轰动&#xff0c;让世界上很多人认识了ai这个词。如今已过去快两年半&#xff0c;AI产品层出不穷&#xff0c;如GPT-4、DeepSeek、Cursor、自动驾驶等&#xff0c;但很多人仍…

【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置&#xff0c;可以看这篇&#xff1a; 【教程】详解配置多台主机通过交换机实现互…

计算机网络 - TCP协议

通过一些问题来讨论 TCP 协议 什么是 TCP &#xff1f;举几个应用了 TCP 协议的例子TCP协议如何保证可靠性&#xff1f;tcp如何保证不会接受重复的报文&#xff1f;Tcp粘包拆包问题了解吗&#xff1f;介绍一下&#xff0c;如何解决&#xff1f;TCP拥塞控制与流量控制区别&…

Fiddler 进行断点测试:调试网络请求

目录 一、什么是断点测试&#xff1f; 二、Fiddler 的断点功能 三、如何在 Fiddler 中设置断点&#xff1f; 步骤 1&#xff1a;启动 Fiddler 步骤 2&#xff1a;启用断点 步骤 3&#xff1a;捕获请求 步骤 4&#xff1a;修改请求或响应 四、案例&#xff1a;模拟登录失…

OpenCv高阶(三)——图像的直方图、图像直方图的均衡化

目录 一、直方图 1、计算并显示直方图 2、使用matplotlib方法绘制直方图&#xff08;不划分小的子区间&#xff09; 3、使用opencv的方法绘制直方图 &#xff08;划分16个小的子亮度区间&#xff09; 4、绘制彩色图像的直方图&#xff0c;将各个通道的直方图值都画出来 二、…

Flutter 与原生通信

Flutter 与原生之间的通信主要基于通道机制&#xff0c;包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel&#xff1a;用于 Flutter 与原生之间的方法调用&#xff0c;实现双向通信&#xff0c;适合一次性的方法调用并获取返回值&#xff0c;如 Flut…

前端面试-Vue篇

核心概念 Vue 3的响应式原理与Vue 2有何本质区别&#xff1f;Vue中虚拟DOM的diff算法优化策略有哪些&#xff1f;Vue组件间通信方式有哪些&#xff1f;适用场景分别是什么&#xff1f;Vue的生命周期钩子在Composition API中如何替代&#xff1f;Vue的模板编译过程是怎样的&…