
MinIO - 从 环境搭建 -> SpringBoot实战 -> 演示,掌握 Bucket 和 Object 操作
发布日期:2025-04-14 03:03:51
浏览次数:10
分类:精选文章
本文共 3957 字,大约阅读时间需要 13 分钟。
MinIO与Spring Boot集成详细指南
一、MinIO基础概念
1.1 Bucket(文件夹)
- 定义:在MinIO中,Bucket相当于文件系统中的文件夹,用于存储Object的逻辑空间。
- 作用:将文件组织成层级结构,便于管理和访问。
1.2 Object(文件)
- 定义:Object是存储到MinIO中的基本单位,类似于文件。
- 特点:可以通过Key进行唯一标识和管理。
二、MinIO部署
2.1 Docker部署
- 步骤a:拉取镜像
docker pull minio/minio
- 步骤b:创建挂载点
mkdir -p ~/env/minio/confmkdir -p ~/env/minio/data
- 步骤c:运行MinIO
docker run -d \ --name minio \ -p 9000:9000 -p 9001:9001 \ --privileged=true \ -e "MINIO_ROOT_USER=root" \ -e "MINIO_ROOT_PASSWORD=rootroot" \ -v ~/env/minio/data:/data \ -v ~/env/minio/conf:/root/.minio \ minio/minio server --console-address ":9000" --address ":9001" /data
- 访问:通过浏览器访问
http://localhost:9000
管理界面。
三、Spring Boot集成MinIO
3.1 依赖管理
- Maven依赖:
io.minio minio 8.5.11 - Gradle依赖:
dependencies { implementation("io.minio:minio:8.5.11")}
3.2 配置类实现
import io.minio.MinioClient;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MinioConfig { @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint("http://100.105.180.32:9001") // 端口为9001 .credentials("root", "rootroot") .build(); }}
四、常见问题与解决方案
4.1 时间差问题报错
- 错误提示:
The difference between the request time and the server's time is too large
。 - 解决方法:
- 安装NTPdate同步时间
yum install ntpdate -y
- 同步服务器时间
ntpdate pool.ntp.org
4.2 Bucket操作示例
- 检查并创建文件夹
@SpringBootTestpublic class MinioApplicationTests { @Resource private lateinit var minioClient: MinioClient @Test fun test1() { val exists = minioClient.bucketExists( BucketExistsArgs.builder() .bucket("dir1") .build() ) if (!exists) { minioClient.makeBucket( MakeBucketArgs.builder() .bucket("dir1") .build() ) } else { println("文件夹已存在!") } }}
4.3 Object操作示例
- 上传文件
@Testfun test1() { val file = File("D:/tmp/滑稽.gif") minioClient.putObject( PutObjectArgs.builder() .bucket("dir1") .object("test.gif") .stream(FileInputStream(file), file.length(), -1) .build() )}@Testfun test2() { minioClient.uploadObject( UploadObjectArgs.builder() .bucket("dir1") .object("test.gif") .filename("D:/tmp/滑稽.gif") .build() )}
4.4 URL签名生成
- 生成签名URL
@Testfun test4() { val url = minioClient.getPresignedObjectUrl( GetPresignedObjectUrlArgs.builder() .bucket("dir1") .object("test.gif") .method(Method.GET) .build() ) println(url)}
4.5 文件下载与管理
- 下载文件
@Testfun test6() { val resp = minioClient.getObject( GetObjectArgs.builder() .bucket("dir1") .object("test.gif") .build() ) val file = FileOutputStream("D:/tmp/123.gif") val result = resp.transferTo(file) println(result)}
五、安全与权限管理
- 设置文件夹权限
@Testfun test5() { // 创建只读文件夹 minioClient.makeBucket( MakeBucketArgs.builder() .bucket("dir2") .build() ) // 设置文件夹访问策略 val jsonConfig = """{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Action": ["s3:GetBucketLocation"], "Resource": ["arn:aws:s3:::dir2"] }, { "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::dir2"], "Condition": { "StringEquals": { "s3:prefix": ["*"] } } }, { "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::dir2/**"] } ] }""" minioClient.setBucketPolicy( SetBucketPolicyArgs.builder() .bucket("dir2") .config(jsonConfig) .build() )}
六、文件管理与操作
- 删除文件
@Testfun test8() { minioClient.removeObject( RemoveObjectArgs.builder() .bucket("dir1") .object("test2.jpg") .build() )}
7. 注意事项
- 时间同步:确保服务器与客户端时间一致。
- 权限管理:谨慎设置访问策略,避免未授权访问。
- 版本控制:定期备份数据,确保数据安全。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月07日 12时15分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MIF格式详解,javascript加载导出 MIF文件示例
2025-04-14
Miller rabin
2025-04-14
miller-rabin matlab,Miller-Rabin素数判断算法
2025-04-14
mime类型大全 input file accept
2025-04-14
Mimikatz2.2 如何抓取Win11登录明文密码
2025-04-14
mina1.7
2025-04-14
Mina中的协议制订和解析策略
2025-04-14
mindspore生物图像分割[U-Net]演示
2025-04-14
mini web
2025-04-14
miniconda设置清华源
2025-04-14
MinIO - 服务端签名直传(前端 + 后端 + 效果演示)
2025-04-14
Mint-Ui 时间组件,比较时间
2025-04-14
Mirantis OpenStack fuel 物理机部署
2025-04-14
MIT-JOS系列6:用户环境(二)
2025-04-14
MixPHP_数据库操作基类
2025-04-14
myeclipse启动resin出错
2025-04-14