Minio容器化部署并整合SpringBoot

1、启动minio容器

docker run  -p 9000:9000 -p 9090:9090 --name minio  -d --restart=always  -e MINIO_ACCESS_KEY=minio  -e MINIO_SECRET_KEY=minio  -v /usr/local/minio/data:/data  -v /usr/local/minio/config:/root/.minio   minio/minio server /data  --console-address ":9000" --address ":9090"
9000端口控制台页面使用
9090端口开发时上传下载使用的端口
MINIO_ACCESS_KEY=minio控制台登录账号
MINIO_SECRET_KEY=minio控制台登录密码

在这里插入图片描述

2、可视化页面

地址 http://ip+9000
账号 运行容器时的MINIO_ACCESS_KEY
密码 运行容器时的MINIO_SECRET_KEY
在这里插入图片描述

2.1 创建bucket

在这里插入图片描述
在这里插入图片描述

2.2 修改bucket权限策略

在这里插入图片描述
在这里插入图片描述

2.3 生成上传使用的鉴权账户

这个在整合SpringBoot中会使用到
在这里插入图片描述
在这里插入图片描述

3、整合SpringBoot

3.1 引入依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.3</version>
</dependency>
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.8.1</version><scope>compile</scope>
</dependency>

3.2 增加配置

minio:host: http://192.168.31.71:9090access-key: adminsecret-key: admin
@Configuration
public class MinIoConfig {@Value(value = "${minio.host}")private String host;@Value(value = "${minio.access-key}")private String accessKey;@Value(value = "${minio.secret-key}")private String secretKey;@Beanpublic MinioClient minioClient()  {MinioClient minioClient = MinioClient.builder().credentials(accessKey, secretKey).endpoint(host).build();return minioClient;}
}

3.3 文件操作

public interface MinIoUploadService {boolean uploadFileToMinIo(String bucket,String fileName,MultipartFile file);boolean createBucket(String bucketName);
}
@Slf4j
@Service
public class MinIoUploadServiceImpl implements MinIoUploadService {@Autowiredprivate MinioClient minioClient;/*** 上传到minio* @param bucket* @param fileName* @param inputStream* @throws Exception*/@Overridepublic boolean uploadFileToMinIo(String bucket,String fileName,InputStream inputStream) {try {PutObjectArgs putObjectArgs = PutObjectArgs.builder().object(fileName)//文件名.bucket(bucket)//桶名词  与minio创建的名词一致//   fileInputStream.available() 表示一直有内容就会上传  -1 表示将所有的相关文件的内容都上传.stream(inputStream, inputStream.available(), -1) //文件流.build();minioClient.putObject(putObjectArgs);return true;}catch (Exception e){log.error(e.getMessage(),e);}return false;}/*** 创建bucket* @param bucketName* @return*/@Overridepublic boolean createBucket(String bucketName){try {BucketExistsArgs bucket = BucketExistsArgs.builder().bucket(bucketName).build();if (!minioClient.bucketExists(bucket)) {MakeBucketArgs make = MakeBucketArgs.builder().bucket(bucketName).build();minioClient.makeBucket(make);}return true;}catch (Exception e){log.error(e.getMessage(),e);}return false;}
}
@Slf4j
@Api(tags = "文件上传控制层")
@RestController
@RequestMapping("/upload")
public class UploadFileController {@Autowiredprivate MinIoUploadService minIoUploadService;@PostMapping("/uploadFile")public Result uploadFile(@RequestBody MultipartFile file){minIoUploadService.uploadFileToMinIo("data", UUID.randomUUID().toString(),file);return Result.success();}}

4、问题梳理

4.1 OkHttp 依赖问题

Unsupported OkHttp library found. Must use okhttp >= 4.8.1
在这里插入图片描述
解决方法
引入版本在4.8.1以上的okhttp依赖

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.8.1</version><scope>compile</scope>
</dependency>

4.2 访问不通Minio问题

io.minio.errors.InvalidResponseException: Non-XML response from server. Response code: 403
S3 API Request made to Console port. S3 Requests should be sent to API port.
在这里插入图片描述
解决方法
首先排查一下连接的地址以及账号密码,这里的地址主要是看一下端口号,搭建minio时会暴露两个端口,一个是操作页面的端口,一个是上传文件的端口,例如本文是通过docker搭建的,暴露了两个端口 9000和9090,其中9000是页面访问使用的,9090是我们文件上传使用的
其次排查一下账号密码,这里的账号密码不是指登录页面使用的,而是登陆后在Service Accounts中创建的
在这里插入图片描述

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

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

相关文章

Day18:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构

目录 小程序获取-各大平台&关键字搜索 小程序体验-凡科建站&模版测试上线 小程序抓包-Proxifier&BurpSuite联动 小程序逆向-解包反编译&动态调试&架构 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系…

微信报修小程序源码

源码获取方式&#xff1a; 1、搜一搜 万能工具箱合集 然后点击资料库&#xff0c;即可获取资源 一、先看Demo&#xff08;已更新至4.0.0&#xff09; 想看界面图片的&#xff0c;辛苦你爬一下楼&#xff0c;点击下方查看资源&#xff0c;进入官方demo 二、功能介绍 1、当前版…

阿里云搭建私有docker仓库(学习)

搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版&#xff08;可以免费使用&#xff09; 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库&#xff0c;可以与我们的github账号进行关联…

2024第十二届济南国际生物发酵产品与技术装备展览会胜利开幕

聚焦生物新产品新技术 引领生物产业发展新趋势 3月5日&#xff0c;2024第十二届济南国际生物发酵产品与技术装备展览会在济南市山东国际会展中心隆重举行。这次展览会&#xff0c;由中国生物发酵产业协会主办&#xff0c;山东省生物发酵产业协会协办&#xff0c;上海信世展览…

Zookeeper:常见的面试题和答案

1、什么是Zookeeper&#xff1f;它的作用是什么&#xff1f; 答&#xff1a; Zookeeper是一个开源的分布式协调服务&#xff0c;提供了一些基本的分布式服务&#xff0c;如配置管理、分布式锁、分布式队列等。其主要作用是帮助分布式应用程序进行协调和管理&#xff0c;确保分…

【剑指offer】C++ 翻转字符串里面的单词

目录 题目&#xff1a; 思路&#xff1a; 代码出现 结果 题目&#xff1a; 给定一个字符串&#xff0c;逐个翻转字符串中的每个单词。 示例 1&#xff1a; 输入: "the sky is blue" 输出: "blue is sky the" 示例 2&#xff1a; 输入: " hello…

289页初中级前端题助你拿下Offer,web前端开发面试技巧

HTML面试题部分 1.H5的新特性有哪些 2.Label的作用是什么&#xff1f;是怎么用的&#xff1f; 3.HTML5的form如何关闭自动完成功能 4.dom如何实现浏览器内多个标签页之间的通信? 5.实现不使用 border 画出1px高的线&#xff0c;在不同浏览器的标准模式与怪异模式下都 能保持一…

数字化转型导师坚鹏:银行业科技产品及零售贷款咨询方法与案例

银行业科技产品及零售贷款咨询方法与实战案例 课程背景&#xff1a; 数字化转型背景下&#xff0c;很多机构存在以下问题&#xff1a; 不知道银行业科技产品咨询方法&#xff1f; 不知道零售贷款咨询方法与案例&#xff1f; 不知道信贷中台咨询方法与案例&#xff1f; …

Redis 7.0版本主从复制机制

1、引言 Redis是一个开源、高性能、内存键值存储系统&#xff0c;同时也提供了数据结构服务器的功能。它支持五种主要的数据类型&#xff1a;字符串&#xff08;String&#xff09;、哈希表&#xff08;Hashes&#xff09;、列表&#xff08;Lists&#xff09;、集合&#xff…

建立网络防御时需要重点考虑的10个因素

互联网安全中心&#xff08;CIS&#xff09;建议企业可以从以下10个因素入手&#xff1a;资产管理、数据管理、安全配置、账户和访问控制管理、漏洞管理、日志管理、恶意软件防御、数据恢复、安全培训和事件响应。 1、资产管理 建立网络防御的第一步是制定企业资产和软件资产的…

【Godot4自学手册】第二十节增加游戏的打击感,镜头震颤、冻结帧和死亡特效

这节我主要学习增加游戏的打击感。我们通过镜头震颤、冻结帧、增加攻击点特效&#xff0c;增加死亡。开始了。 一、添加攻击点特效 增加攻击点特效就是&#xff0c;在攻击敌人时&#xff0c;会在敌人受击点显示一个受击动画。 1.添加动画。 第一步先做个受击点动画。切换到…

【韩国留学】四大生活技能 学起来!柯桥留学中介韩语学习

如何高效拿学分 在韩国大学&#xff0c;学分是评价学生学习成果的重要标准。要想高效拿学分&#xff0c;首先要制定合理的学习计划。明确每学期需要修的课程&#xff0c;并提前预习&#xff0c;了解课程重点和难点。 其次&#xff0c;要积极参与课堂讨论&#xff0c;这不仅能提…