当前位置: 首页 > news >正文

SpringBoot3整合MinIO

快速上手MinIO文件服务

配套视频:SpringBoot3整合MinIO
MinIO项目应用可参考视频 【SpringBoot3+Vue3+Uniapp小程序项目实战】

1. 概述

MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

优点

  • MinIO 是一个非常轻量的服务。

  • 学习成本低,安装运维简单,开箱即用

  • 提供 Java 客户端、JS 客户端

下载 https://min.io/

2. 启动服务

打开cmd进入minio目录,执行minio server ./data ,其中data目录为文件存储目录

访问 控制台 http://localhost:9000,用户密码默认均为 minioadmin

3. SpringBoot3整合MinIO

  1. pom

    <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version>
    </dependency>
    <dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId><version>1.3.70</version>
    </dependency>
    <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.4</version><exclusions><exclusion><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId></exclusion><exclusion><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId></exclusion></exclusions>
    </dependency>
    
  2. application.yml

    my:minio:endpoint: 127.0.0.1             #  ip地址port: 9000                      #  端口号accessKey: minioadmin           #  账号secretKey: minioadmin           #  密码secure: false                   #  true代表用的是https,false则用的是http,默认值是truebucketName: "test"              #  桶的名字expiry: 8                       #  文件url访问有效期,单位小时
    
  3. 创建配置类

    package com.qqcn.file.config;import io.minio.MinioClient;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    public class MinioConfig {@Value("${my.minio.endpoint}")private String endpoint;@Value("${my.minio.port}")private Integer port;@Value("${my.minio.accessKey}")private String accessKey;@Value("${my.minio.secretKey}")private String secretKey;@Value("${my.minio.secure}")private Boolean secure;@Beanpublic MinioClient minioClient(){return MinioClient.builder().endpoint(endpoint,port,secure).credentials(accessKey, secretKey).build();}
    }
    
  4. Controller

    package com.qqcn.file.controller;import com.qqcn.common.vo.Result;
    import com.qqcn.file.utils.MinioUtils;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;import java.util.Map;@RestController
    @RequestMapping("/file")
    @Slf4j
    public class FileController {@Autowiredprivate MinioUtils minioUtils;@PostMapping(value = "/upload", consumes = "multipart/form-data")public Result<Map<String,Object>> upload(@RequestPart("file") MultipartFile file){if(file == null || file.getSize() ==0){return Result.fail("上传文件不能为空文件");}try {Map<String, Object> uploadResult = minioUtils.upload(file);return Result.success(uploadResult);} catch (Exception e) {log.error(e.getMessage());return Result.fail("文件上传失败");}}@GetMapping("/url/{fileName}")public Result<String> getFileUrl(@PathVariable("fileName") String fileName){String url = minioUtils.getUrl(fileName);return Result.success(url,"success");}@DeleteMappingpublic Result<String> deleteFile(@RequestParam("fileName") String fileName){try {minioUtils.removeObject(fileName);} catch (Exception e) {return Result.fail("文件删除失败");}return Result.success();}}

相关文章:

  • 【前端工程化面试题目】webpack 的热更新原理
  • 加解密算法
  • 【2024毕业快刊】检索49年老刊,中科院TOP,最快21天,国人友好,着急毕业推荐!
  • 无向图的双连通分量
  • ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格
  • 深度学习基础之《TensorFlow框架(6)—张量》
  • haproxy集成国密ssl功能
  • 23-k8s中的控制器资源-DaemonSet控制器
  • PiflowX-组件UnionAll
  • 【C++】vector模拟实现+迭代器失效
  • SSH连接密码问题:原因、表现与解决方案
  • rtt的io设备框架面向对象学习-软件模拟rtc设备
  • WebGL中开发科学数据可视化应用
  • 2.20数据结构与算法学习日记(二叉树第一部分)
  • 利用MATLAB/Simulink仿真模型加速嵌入式控制系统的开发——以多学科融合的电机控制为例
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 3.7、@ResponseBody 和 @RestController
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • echarts的各种常用效果展示
  • es6--symbol
  • ES6系列(二)变量的解构赋值
  • exif信息对照
  • iOS | NSProxy
  • java8-模拟hadoop
  • JavaScript设计模式系列一:工厂模式
  • Linux下的乱码问题
  • Mac转Windows的拯救指南
  • Meteor的表单提交:Form
  • vue 个人积累(使用工具,组件)
  • 闭包--闭包之tab栏切换(四)
  • 和 || 运算
  • 基于 Babel 的 npm 包最小化设置
  • 记录一下第一次使用npm
  • 配置 PM2 实现代码自动发布
  • 使用putty远程连接linux
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #stm32整理(一)flash读写
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ***检测工具之RKHunter AIDE
  • .axf 转化 .bin文件 的方法
  • .Family_物联网
  • .Net CF下精确的计时器
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET学习教程二——.net基础定义+VS常用设置
  • .Net中间语言BeforeFieldInit
  • /proc/vmstat 详解
  • @Builder用法
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思