docker安装minio、使用springboot集成minio同时创建并设置minio桶仅可读

server/2024/11/17 16:16:09/

docker-compose安装minio,并设置挂载目录

java">version: '3.8'services:minio:image: minio/miniocontainer_name: minioenvironment:MINIO_ROOT_USER: rootMINIO_ROOT_PASSWORD: 123456789restarts: alwaysprivileged: trueports:- "9000:9000"- "9001:9001"volumes:- ./minio-data:/datacommand: server /data --console-address ":9001"

其中请自行修改用户名、密码、挂载目录和对应的端口与映射(密码至少需要9位,否则启动报错)

其中9001是后台服务的端口

springboot集成minio

pom.xml

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

application.yml 

minio:endpoint: http://xxx:9000 #Minio服务所在地址bucket: test #存储桶名称accessKey: root #访问的keysecretKey: 1234 #访问的秘钥

 springboot读取配置文件并注册bean

配置属性的实体类

java">@Data
@ConfigurationProperties(prefix = "minio")
@Component
public class MinioProp {private String endpoint;private String accessKey;private String secretKey;private String bucket;
}

配置类

java">@Configuration
public class MinioConfig {@Autowiredprivate MinioProp minioProp;@Beanpublic MinioClient minioClient(){return MinioClient.builder().endpoint(minioProp.getEndpoint()).credentials(minioProp.getAccessKey(), minioProp.getSecretKey()).build();}
}

springboot创建桶并设置桶仅可读

以下代码仅做示例

java">@RestController
@Slf4j
public class TestController {@Autowiredprivate MinioClient minioClient;@Autowiredprivate MinioProp minioProp;@GetMapping("/init")public R<String> init() {try {boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProp.getBucket()).build());if (!exists) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProp.getBucket()).build());}} catch (Exception e) {return R.fail(ResultStatusEnum.FAIL);}return R.ok("init success");}@GetMapping("/set-public")public R<String> setPublic() {String policyJson = "{\n" +"    \"Version\": \"2012-10-17\",\n" +"    \"Statement\": [\n" +"        {\n" +"            \"Effect\": \"Allow\",\n" +"            \"Principal\": {\n" +"                \"AWS\": [\n" +"                    \"*\"\n" +"                ]\n" +"            },\n" +"            \"Action\": [\n" +"                \"s3:GetObject\"\n" +"            ],\n" +"            \"Resource\": [\n" +"                \"arn:aws:s3:::" + minioProp.getBucket() + "/*\"\n" +"            ]\n" +"        }\n" +"    ]\n" +"}";try {minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(minioProp.getBucket()).config(policyJson).build());} catch (Exception e) {return R.fail(ResultStatusEnum.FAIL);}return R.ok("set public success");}
}

上传文件

java">@Autowired
private MinioClient minioClient;
@Autowired
private MinioProp minioProp;
@PostMapping
public R<String> uploadImage(@RequestParam("file") MultipartFile file) {try {String originalFilename = file.getOriginalFilename();String type = FileUtil.extName(originalFilename);String path = "testPath";String fileName = IdUtil.fastSimpleUUID() + StrUtil.DOT + type;minioClient.putObject(PutObjectArgs.builder().bucket(minioProp.getBucket()).object(path+ '/' + fileName).contentType(file.getContentType()).stream(file.getInputStream(), file.getInputStream().available(), -1).build());log.info("文件上传成功:{}", originalFilename);return R.ok(minioProp.getEndpoint() +"/" + minioProp.getBucket() +"/" + path+"/" + fileName);} catch (Exception e) {log.error("上传文件失败", e);return R.fail(ResultStatusEnum.FAIL);}
}

此时通过上面方法返回的地址即可访问该文件

通过9001端口进入到后台页面,可以发现该文件已上传


http://www.ppmy.cn/server/142682.html

相关文章

微服务链路追踪skywalking安装

‌SkyWalking是一个开源的分布式追踪系统&#xff0c;主要用于监控和分析微服务架构下的应用性能。‌ 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案&#xff0c;特别适用于微服务、云原生架构和基于容器的环境&#xff08;如Docker、K8s、Mesos&…

记录no.28

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>; //一维数组&#xff0c;在地址中连续存放 int main() { int arr[] { 1,2,3,4,5,6,7,8,9,10 };//一个整型int占四个字节 int sz sizeof(arr) / sizeof(arr[0]); int i 0; /*for (i 0; i < …

【Linux】网络基础

目录 初识协议 协议分层 OSI七层模型 TCP/IP五层&#xff08;或四层&#xff09;模型 再识协议 为什么要有TCP/IP协议&#xff1f; 什么是TCP/IP协议&#xff1f; TCP/IP协议与操作系统的关系 究竟是什么协议 网络传输基本基本流程 局域网网络传输流程图 跨网络传输…

定时清理潜在客户列表中的无效邮箱可提高EDM电子邮件自动化营销邮件送达率

定时清理无效邮箱对于邮件营销来说&#xff0c;具有多重好处&#xff0c;这些好处直接关系到营销活动的效率、成本节约、品牌形象以及法律合规性。以下是几个关键方面&#xff1a; 提高邮件送达率&#xff1a; 无效邮箱&#xff08;如不存在、拼写错误或已废弃的邮箱地址&…

机器学习day3-KNN算法、模型调优与选择

五 sklearn机器学习概述 1.实例化预估器(估计器)对象(estimator)&#xff0c; 预估器对象很多,都是estimator的子类&#xff08;1&#xff09;用于分类的预估器sklearn.neighbors.KNeighborsClassifier k-近邻sklearn.naive_bayes.MultinomialNB 贝叶斯sklearn.linear_model.L…

吉林大学 超星慕课 高级语言程序设计 学习通部分题目极其答案

题目编号:Exp04-Basic06&#xff0c;GJBook3-06-04 题目名称:循环右移 题目描述:编写程序&#xff0c;不使用其它辅助数组&#xff0c;把一维整型数组中的各个素循环右移位。 输入: 第一行输入两个整数&#xff0c;n表示数组长度(0<n<100)&#xff0c;j表示循环右移的…

faiss 提供了多种索引类型

faiss 多种索引类型 在 faiss 中&#xff0c;IndexFlatL2 是一个简单的基于 L2 距离&#xff08;欧几里得距离&#xff09;进行索引的索引类型&#xff0c;但实际上&#xff0c;faiss 提供了多种索引类型&#xff0c;支持不同的度量方式和性能优化&#xff0c;您可以根据需求选…

javaScript交互补充3(JSON数据)

3.1、JSON &#xff08;1&#xff09;、定义&#xff1a; JSON数据格式 JavaScript Object Notation缩写 即 js对象表示法 由于JS中的对象只有JS自己认识&#xff0c;其他的语言都不认识&#xff0c;所以引入了JSON&#xff0c;JSON就是一个特殊格式的字符串&#xff0c;这个…