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的功能了。
相关文章
|
19天前
|
消息中间件 Java Kafka
Springboot集成高低版本kafka
Springboot集成高低版本kafka
|
25天前
|
NoSQL Java Redis
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
290 0
|
1天前
|
Java Spring
Spring Boot脚手架集成校验框架
Spring Boot脚手架集成校验框架
6 0
|
2天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
|
4天前
|
Java 关系型数据库 数据库
【SpringBoot系列】微服务集成Flyway
【4月更文挑战第7天】SpringBoot微服务集成Flyway
【SpringBoot系列】微服务集成Flyway
|
11天前
|
存储 移动开发 前端开发
对象存储oss使用问题之OSS SDK .net 使用下载例程报错如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
25 0
|
19天前
|
SQL Java 调度
SpringBoot集成quartz定时任务trigger_state状态ERROR解决办法
SpringBoot集成quartz定时任务trigger_state状态ERROR解决办法
|
6天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
292 0
|
6月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
148 0