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 开发工具 Maven
springboot项目打包为sdk供其他项目引用
springboot项目打包为sdk供其他项目引用
2549 1
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1145 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
存储 Java API
MinIO Java SDK 7.1.4 升级到 8.5.17 需要注意什么
现在我需要你帮我分析对比这个两个sdk在对外的接口设计上是否有不兼容的变更
1384 5
|
Java 开发工具 Spring
【Azure Application Insights】为Spring Boot应用集成Application Insight SDK
本文以Java Spring Boot项目为例,详细说明如何集成Azure Application Insights SDK以收集和展示日志。内容包括三步配置:1) 在`pom.xml`中添加依赖项`applicationinsights-runtime-attach`和`applicationinsights-core`;2) 在main函数中调用`ApplicationInsights.attach()`;3) 配置`applicationinsights.json`文件。同时提供问题排查建议及自定义日志方法示例,帮助用户顺利集成并使用Application Insights服务。
448 8
|
Web App开发 前端开发 JavaScript
如何快速与呼叫中心系统CTI/API/SDK接口集成
由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
1041 157
如何快速与呼叫中心系统CTI/API/SDK接口集成
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
364 2
|
11月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
935 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
665 0
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1048 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
486 7