Springboot整合minio

第一步:查找 minio 最新依赖,通过 maven 查询网站查询, 这搜索框输入 minio, 也可以查看 MinIO 官网 https://docs.min.io/docs/java-client-quickstart-guide.html如下:

33aa28be1761487e062b87213979524a.png

点击 minio 进入查看 maven 依赖,可以看到最新版为 8.3.4

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.3.4</version>
</dependency>

第二步:(整合到项目中)

1. 将依赖添加到新建的 springboot 项目中, 在 pom.xml 添加 2. 配置 minio 客户端, 不会的话参考 minio java sdk 文档, 但是这个文档给的是 3.0.10 版本的 sdk,与新版的不兼容,最新版的还是看 github 地址

参数说明
Endpoint对象存储服务的 URL
Access KeyAccess key 就像用户 ID,可以唯一标识你的账户
Secret KeySecret key 是你账户的密码

默认安装不指定 Access key 和 Secret key 的话都是 minioadmin, Endpoint 则为服务器地址:如我安装的的端口为 1024,那 Endpoint 就是: http://localhost:1024] 为了方便我们通过 bean 的方式注入客户端如下:

yml

spring:
  # 配置文件上传大小限制
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB

# minio 参数配置
minio:
  endpoint: http://localhost:1024
  accessKey: minioadmin
  secretKey: minioadmin
@Configuration
public class MinIoClientConfig {

    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;

    /**
     * 注入minio 客户端
     * @return
     */
    @Bean
    public MinioClient minioClient(){

    return MinioClient.builder()
                        .endpoint(endpoint)
                        .credentials(accessKey, secretKey)
                        .build();
    }
}

ok, 现在客户端已注入 spring 容器中,在使用的时候,只需要获取就可以了。

第三步: 文件上传 1. 新增一个 UploadController 控制器用于处理文件上传,如下:

@RestController
public class UploadController {

    @Resource
    private MinioClient minioClient;

    /**
     * 文件上传
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public String upload(MultipartFile file){

        try {
            PutObjectArgs objectArgs = PutObjectArgs.builder().object(file.getOriginalFilename())
                    .bucket("test")
                    .contentType(file.getContentType())
                    .stream(file.getInputStream(),file.getSize(),-1).build();

            minioClient.putObject(objectArgs);
            return "ok";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }
}

注意这里的 bucket 是我提前在 minio 中新增好的,如果没有的话,可以自己手动添加,也可以通过代码添加, 具体参考 sdk 的说明, 这里就不多说了。

2. 通过 postman 测试文件上传(没有 postman 的可以看我之前的博客,有相关介绍)

358dd0b1913f34953c7c08c1971af735.png

点击执行后返回 ok, 执成功, 此时通过 minio web 端看看文件是否上传成功

81ae8805305e715b86c454dcb71e3883.png

看到刚上传的文件就说明成功了。3. 其他说明, 如何通过浏览器访问刚上传的图片呢,就是通过 endpoint 服务地址加 bucket 名称加图片的名称,在本例子访问路径则为:5b01ca40273bcf53f4e6d84c0c595642.gif

第四步: 文件下载

在 UploadController 控制其中新增 download 方法, 如下:

/**
     * 下载文件
     * @param filename
     */
    @GetMapping("/download/{filename}")
    public void download(@PathVariable String filename, HttpServletResponse res){

        GetObjectArgs objectArgs = GetObjectArgs.builder().bucket("test")
                .object(filename).build();

        try (GetObjectResponse response = minioClient.getObject(objectArgs)){
            byte[] buf = new byte[1024];

            int len;

            try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()){

                while ((len=response.read(buf))!=-1){

                    os.write(buf,0,len);

                }
                os.flush();

                byte[] bytes = os.toByteArray();

                res.setCharacterEncoding("utf-8");
                res.setContentType("application/force-download");// 设置强制下载不打开
                res.addHeader("Content-Disposition", "attachment;fileName=" + filename);
                try ( ServletOutputStream stream = res.getOutputStream()){
                    stream.write(bytes);
                    stream.flush();
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

通过访问下载地址:http://localhost:8421/download/5b01ca40273bcf53f4e6d84c0c595642.gif, 文件下载下来能够正常显示,则说明成功。

总结: 通过以上操作,我们已经完成 springboot 与 minio 的整合,可以通过 minio sdk 实现文件上传与下载功能。当然还有其他 api 操作,我就不多介绍了,都是一个思路,调用传值就可以了,自己尝试一下,就能 get 到了。


作者:Archie_java

来源链接:

https://blog.csdn.net/qq_43842093/article/details/121873566

783f9a29ed53c647025d9a56d4b7fae7.png

整合MinioSpring Boot可以通过以下几个步骤完成: 1. 首先,需要在pom.xml文件中添加Minio依赖项。你可以使用以下代码片段添加依赖项: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.4.3</version> </dependency> ``` 2. 接下来,在application.yml(或application.properties)文件中配置Minio的连接信息。你需要提供Minio服务端的地址、访问密钥和存储桶名称。以下是一个示例: ```yaml minio: url: 129.0.0.1:9000 access-key: minioadmin secret-key: minioadmin bucket-name: ding_server ``` 3. 最后,在你的代码中使用Minio客户端库进行操作。你可以根据需要使用Minio的API来上传、下载和管理对象。以下是一个使用Minio客户端库的示例: ```java import io.minio.MinioClient; import io.minio.errors.MinioException; // 创建Minio客户端 MinioClient minioClient = new MinioClient("http://localhost:9000", "minioadmin", "minioadmin"); // 上传对象到Minio存储桶 minioClient.putObject("your-bucket-name", "your-object-name", "/path/to/your-file"); // 下载对象从Minio存储桶 minioClient.getObject("your-bucket-name", "your-object-name", "/path/to/save/downloaded-file"); // 列出Minio存储桶中的所有对象 Iterable<Result<Item>> results = minioClient.listObjects("your-bucket-name"); for (Result<Item> result : results) { Item item = result.get(); System.out.println(item.objectName()); } // 删除Minio存储桶中的对象 minioClient.removeObject("your-bucket-name", "your-object-name"); ``` 以上就是在Spring Boot整合Minio的基本步骤。你可以根据具体需求进行进一步的操作和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [springboot整合minio](https://blog.csdn.net/qq_36090537/article/details/128100423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [SpringBoot整合Minio](https://blog.csdn.net/weixin_46573014/article/details/128476327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值