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. 注意事项

  • 时间同步:确保服务器与客户端时间一致。
  • 权限管理:谨慎设置访问策略,避免未授权访问。
  • 版本控制:定期备份数据,确保数据安全。
上一篇:MinIO - 服务端签名直传(前端 + 后端 + 效果演示)
下一篇:miniconda设置清华源

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月07日 12时15分53秒