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

news/2024/11/14 12:39:54/

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/news/1546926.html

相关文章

在 MySQL 8.0 中,SSL 解密失败,在使用 SSL 加密连接时出现了问题

在 MySQL 8.0 中&#xff0c;SSL 解密失败通常指的是在使用 SSL 加密连接时出现了问题&#xff0c;导致无法建立加密通信。这个问题可能由多种原因引起&#xff0c;下面是一些常见的原因和排查方法&#xff1a; 1. 证书配置问题 确保您在 MySQL 配置中使用了正确的 SSL 证书和…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目&#xff0c;它们犹如璀璨星辰&#xff0c;用各自的故事和成就&#xff0c;为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者&#xff0c;共同撰写并分享项目在GitCode平台上托管的体验&#xff0c;挖掘平…

汽车共享管理:SpringBoot技术的应用与挑战

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了共享汽车管理系统的开发全过程。通过分析共享汽车管理系统管理的不足&#xff0c;创建了一个计算机管理共享汽车管理系统的方案。文章介绍了共享汽车管理系统的系…

深入理解AIGC背后的核心算法:GAN、Transformer与Diffusion Models

深入理解AIGC背后的核心算法&#xff1a;GAN、Transformer与Diffusion Models 前言 随着人工智能技术的发展&#xff0c;AIGC&#xff08;AI Generated Content&#xff0c;人工智能生成内容&#xff09;已经不再是科幻电影中的幻想&#xff0c;而成为了现实生活中的一种新兴力…

火山引擎数据飞轮模式下的线上营销:内容产出更智能、人群触达更精准

今年年中&#xff0c;中欧国际工商学院等机构联合发布《2023 年中国首席营销官&#xff08;CMO&#xff09;调查报告》&#xff08;以下简称“报告”&#xff09;。 报告基于 167 家企业营销决策者调研&#xff0c;指出在激烈的市场竞争下&#xff0c;企业倾向于加强“拓新”策…

MYSQL中的两种转义操作

在 MySQL 中&#xff0c;转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符 可以用转义符\ 和 两个连续的引号 来起到转义引号的作用 转义符转义: 这是users表中的数据 如果查询admin 或者 admin" 用户,可以用转义符\ 两个连…

无效的目标发行版17和无法连接Maven进程问题

起因&#xff1a;我clean了一个模块的Maven想要重新下&#xff0c;他就开始报错。两次了都是这样。如果和我一样一开始都是好好的&#xff0c;直接找Maven的设置&#xff0c;在运行程序改&#xff0c;jre变成了11.它自己变成了我其他的jdk

正确使用primefaces的process和update

process属性作用于服务端&#xff0c;用于指定在表单提交或Ajax请求时&#xff0c;哪些组件需要在JSF的生命周期中被处理。它有以下几个值&#xff1a; this&#xff1a;表示只处理当前组件。form&#xff1a;表示处理当前表单内的所有组件。 update属性作用于客户端&#xf…