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的功能了。
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
4月前
|
存储 前端开发 Java
SpringBoot使用云端资源url下载文件的接口写法
在Spring Boot中实现从云端资源URL下载文件的功能可通过定义REST接口完成。示例代码展示了一个`FileDownloadController`,它包含使用`@GetMapping`注解的方法`downloadFile`,此方法接收URL参数,利用`RestTemplate`下载文件,并将文件字节数组封装为`ByteArrayResource`返回给客户端。此外,通过设置HTTP响应头,确保文件以附件形式下载。这种方法适用于从AWS S3或Google Cloud Storage等云服务下载文件。
466 7
|
18天前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
58 8
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
278 11
|
2月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
43 6
|
2月前
|
存储 前端开发 Java
springboot文件上传和下载接口的简单思路
本文介绍了在Spring Boot中实现文件上传和下载接口的简单思路。文件上传通过`MultipartFile`对象获取前端传递的文件并存储,返回对外访问路径;文件下载通过文件的uuid名称读取文件,并通过流的方式输出,实现文件下载功能。
springboot文件上传和下载接口的简单思路
|
1月前
|
JavaScript 前端开发 Java
Springboot+vue实现文件的下载和上传
这篇文章介绍了如何在Springboot和Vue中实现文件的上传和下载功能,包括后端控制器的创建、前端Vue组件的实现以及所需的依赖配置。
217 0
|
3月前
|
Java
Java SpringBoot FTP 上传下载文件
Java SpringBoot FTP 上传下载文件
145 0
|
3月前
|
JavaScript Java
SpringBoot 下载文件
SpringBoot 下载文件
34 0

热门文章

最新文章

下一篇
无影云桌面