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的功能了。
相关文章
|
8月前
|
Java 开发工具 Maven
springboot项目打包为sdk供其他项目引用
springboot项目打包为sdk供其他项目引用
1044 1
|
11天前
|
安全 定位技术 API
婚恋交友系统匹配功能 婚恋相亲软件实现定位 语音社交app红娘系统集成高德地图SDK
在婚恋交友系统中集成高德地图,可实现用户定位、导航及基于地理位置的匹配推荐等功能。具体步骤如下: 1. **注册账号**:访问高德开放平台,注册并创建应用。 2. **获取API Key**:记录API Key以备开发使用。 3. **集成SDK**:根据开发平台下载并集成高德地图SDK。 4. **配置功能**:实现定位、导航及基于位置的匹配推荐。 5. **注意事项**:保护用户隐私,确保API Key安全,定期更新地图数据,添加错误处理机制。 6. **测试优化**:完成集成后进行全面测试,并根据反馈优化功能。 通过以上步骤,提升用户体验,提供更便捷的服务。
|
4月前
|
XML JSON Java
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
本文介绍了在Spring Boot中如何实现文件上传,包括单文件和多文件上传的实现,文件上传的表单页面创建,接收上传文件的Controller层代码编写,以及上传成功后如何在页面上遍历并显示上传的文件。同时,还涉及了`MultipartFile`类的使用和`@RequestPart`注解,以及在`application.properties`中配置文件上传的相关参数。
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
|
6月前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
6月前
|
Java
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
软件开发常用之SpringBoot文件下载接口编写(下),Vue+SpringBoot文件上传下载预览,服务器默认上传是1M,可以调节,调节文件上传大小写法,图片预览,如何预览后下次还能看到,预览写法
|
6月前
|
存储 Java
软件开发常用之SpringBoot文件上传接口编写(中),一本书,代码大全(里面有很多代码重构的方法),屎山代码的原因是不断追加逻辑,在错误代码上堆积新的功能,在写完逻辑之后去思考一下,逻辑合理不
软件开发常用之SpringBoot文件上传接口编写(中),一本书,代码大全(里面有很多代码重构的方法),屎山代码的原因是不断追加逻辑,在错误代码上堆积新的功能,在写完逻辑之后去思考一下,逻辑合理不
|
6月前
|
Java 文件存储
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
|
7月前
|
Java
springboot文件上传分类保存并回显
springboot文件上传分类保存并回显
|
5月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
133 0
|
2月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
92 1