springboot集成minio SDK实现文件上传下载(上)

简介: springboot集成minio SDK实现文件上传下载

为了在项目中实现文件的管理,我们打算在项目中使用minio对象存储服务。如何搭建minio服务,可以查看Docker compose快速部署minio服务

在minio服务搭建好的情况下,我们要准备在springboot项目当中集成minio SDK,以便我们项目中的文件能全部交由minio服务来管理。

准备工作

访问http://ip:9001,通过管理员用户名密码登陆。

  • 创建文件桶
    从正常项目管理的角度来看,我们一般会提前把文件桶创建好。在团队开发中制定规范,达成共识,确定当前项目对应的文件桶名称,不同业务类型的文件放在什么名称的文件夹下面。
    比如以当前项目名称创建一个文件桶,在这个文件桶里面再创建不同的文件夹,类似image、vedio等。这样的话,我们针对头像、音视频等文件就可以放到指定的文件夹里面了。
  • 创建指定的用户,赋予对应的权限


97602b5466f745a69057f30fd2e9895b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

先把需要创建的用户名和密码填好,其他可暂时不选,然后创建用户。

其次创建权限:

1.点击左侧栏Access;

2.点击Create Policy


8012625f12f34bfe8ce3fa71f9a78867_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

74439afc72184a8d85bab369b178d7e4_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

权限配置:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awesome-spring"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::awesome-spring/*"
            ]
        }
    ]
}
复制代码

首先awesome-spring是文件桶的名称,里面一共包含两段权限:

  • 第一段权限是允许在awesome-spring文件桶中执行GetBucketLocationGetObject(下载)PutObject(上传)操作,基本上满足上传下载的业务。
  • 第二段权限是允许在awesome-spring的子文件夹中做所有的操作。我们可以根据实际情况把权限设置得更细粒度。

权限和用户都创建完毕后,我们再回到用户列表,我们需要做的步骤就是把用户和权限关联起来:

911b9ae48a7b4e5c9b9f0404ce326258_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

911b9ae48a7b4e5c9b9f0404ce326258_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

39be1ee2befa4ac499cd0200a0588035_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

  • 通过以上步骤,我们把权限和用户关联起来了,这样的话,我们新创建的这个用户就有了操作这个bucket的权限了。
    如果团队人员比较多的话,我建议通过创建Group的方式,给对应的Group赋予权限,最后把新创建的用户放进Group,这样的话,可以避免一个一个给用户配置权限。
  • 创建开发需要的AccessKey和SecretKey
    当我们拿到新创建的用户后,登陆http://ip:9001


a54a0d08a89445e8863de354e7bd6d42_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

我们可以看到,目前的新用户只能看到当前拥有权限的bucket。

接下来,我们立马创建一个service account来为我们顺利使用minio SDK作准备:


7c17c011d14a44628731ab310e618703_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

【注意】secret key只有再第一次创建的时候会显示,创建成功后就无法查看,建议下载下来保存好。


Minio SDK依赖

想要把Minio服务集成到springboot项目中,我们可以通过它所提供的SDK来做的,下面我们找到了Maven依赖:

<!--minio文件存储-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.4.3</version>
</dependency>
复制代码

如果是gradle或者其他依赖管理工具可以去mvnrepository.com/artifact/io… 查找相关的依赖。

文件上传下载功能实现

  • 准备自定义minio config
minio:
  config:
    # 请填写自己minio服务的ip和端口
    endpoint: "http://ip:9000"
    bucket-name: 文件桶名称
    access-key: "pXLVexkIGrvhfPbC"
    secret-key: "wcI9GE9UeX4qVQik2dV9zK6DkeZVZ3TR"
复制代码
  • 通过springboot的ConfigurationProperties的功能,将配置转换成java bean:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
 * @author zouwei
 * @className MinioConfigProperties
 * @date: 2022/8/4 下午4:35
 * @description:
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "minio.config")
public class MinioConfigProperties {
  /**
   * minio服务API访问入口
   */
  private String endpoint;
  /**
   * 桶名称
   */
  private String bucketName;
  /**
   * 公钥
   */
  private String accessKey;
  /**
   * 私钥
   */
  private String secretKey;
}
复制代码
  • 实例化minio client
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author zouwei
 * @className MinioConfig
 * @date: 2022/8/4 下午4:27
 * @description:
 */
@Configuration
public class MinioConfig {
  @Autowired
  private MinioConfigProperties properties;
  @Bean
  public MinioClient minioClient() {
    return MinioClient.builder()
        .credentials(properties.getAccessKey(), properties.getSecretKey())
        .endpoint(properties.getEndpoint())
        .build();
  }
}
复制代码
  • 通过java config的方式把MinioClient实例化交给spring ioc容器来管理,接下来就可以直接在spring框架体系下正常使用SDK的功能了。
相关文章
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
699 0
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
523 0
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
1217 0
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
1260 44
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
778 3
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
1009 0
第07课:Spring Boot集成Thymeleaf模板引擎
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
1089 2
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
593 2
|
存储 Java API
MinIO Java SDK 7.1.4 升级到 8.5.17 需要注意什么
现在我需要你帮我分析对比这个两个sdk在对外的接口设计上是否有不兼容的变更
1352 5

热门文章

最新文章