SpringBoot整合minio笔记

news2024/11/24 11:31:06

SpringBoot整合minio笔记

物料准备:

1.引入minio以及 spring-file-storage 相关依赖

2.配置yml

3.配置 FileRecorder实现类

4.启用@EnableFileStorage注解

5.测试上传

引入minio以及 spring-file-storage 相关依赖

minio是一个OSS云存储服务,minio 服务端的安装这里不再介绍,可以看我之前的博客文章;

spring-file-storage 是一个 文件存储集成平台。这是一个开源项目,利用spring-file-storage可以快速整合多种存储源,如 本地存储,minio ,阿里云OSS ,腾讯云COS 等多种存储源。

<dependencies>      
<!-- spring-file-storage 必须要引入 -->
        <dependency>
            <groupId>cn.xuyanwu</groupId>
            <artifactId>spring-file-storage</artifactId>
            <version>0.5.0</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

<!--   引入8.4.3版本的minio ,并排除内部的okhttp     -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.4.3</version>
            <exclusions>
                <exclusion>
                    <groupId>com.squareup.okhttp3</groupId>
                    <artifactId>okhttp</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!--   引入4.8.1版本 的okhttp     -->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.8.1</version>
        </dependency>
    </dependencies>
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

<!--    覆盖  spring-boot父pom里的okhttp版本号,改为使用4.8.1版本      -->
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>4.8.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

minio 控制台创建Access Key

需要访问minio的web控制台,进入Access Keys菜单,点击新建Access Key按钮,
就会生成一对access-key 和 secret-key,
这个要记下来,后面要用

请添加图片描述

配置yml

server:
  port: 8621
  servlet:
    context-path: /mybatis

spring:
  application:
    name: demo706
  servlet:
    multipart:
      max-file-size: 50MB  #单个文件的最大上限
      max-request-size: 200MB  #单个请求的文件总大小限制
      location: ${user.home}/.${spring.application.name}/tempDir
  file-storage: #文件存储配置
    default-platform: minio-2 #默认使用的存储平台
    thumbnail-suffix: ".min.jpg" #缩略图后缀,例如【.min.jpg】【.png】

    minio: # MinIO,由于 MinIO SDK 支持 AWS S3,其它兼容 AWS S3 协议的存储平台也都可配置在这里
      - platform: minio-2 # 存储平台标识
        enable-storage: true  # 启用存储
        access-key: CDKeVZDXfh8l6rVI    # minio里的access-key
        secret-key: nNGSuY2t5oTO0bFgojy04htcQVFhYG3o   # minio里的secret-key
        end-point: http://192.168.81.123:9090  # minio的服务器端口
        bucket-name: fus1128  # minio里的存储桶名
#        domain: http://192.168.81.123:9090/fus1128/ # 访问域名,注意“/”结尾
        domain: http://192.168.81.123:9090/${spring.file-storage.minio[0].bucket-name}/
    local:
      - platform: local-1
        enable-storage: true
        enable-access: true
        domain: '/oss/'  # 访问示例http://127.0.0.1:8621/mybatis/oss/64a68ed2939a1e5b1ea177b0.jpg
        base-path: E:/temp/
        path-patterns: /oss/**      

配置 FileRecorder实现类

package com.example.demo.sfs;

import cn.xuyanwu.spring.file.storage.FileInfo;
import cn.xuyanwu.spring.file.storage.recorder.FileRecorder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 如果需要对上传的文件 做持久化管理,
 * 可以通过实现FileRecorder,
 * 来完成文件的上传记录,查询详情,删除记录
 */
@Service
@Slf4j
public class MySfsFileRecorder implements FileRecorder {

    //存储-官方预留API
    @Override
    public boolean record(FileInfo fileInfo) {
        //todo: 可以将FileInfo 信息存入数据库中
        return false;
    }

    //查询-官方预留API
    @Override
    public FileInfo getByUrl(String s) {
        //todo: 可以从数据库中 查询出某个文件详细信息,然后封装为FileInfo
        return null;
    }

    //删除-官方预留API
    @Override
    public boolean delete(String s) {
        //todo: 如果需要删除文件,可以先删除数据库中的文件上传记录, 再删除实际的文件
        return false;
    }
}

启用@EnableFileStorage注解

可以在启动类上添加@EnableFileStorage注解

@EnableFileStorage
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

测试上传

测试spring-file-storage内置的本地存储功能

@Autowired
    private FileStorageService fileStorageService;//注入实列

@Test
    void test1(){
        //上传本地文件
        File file = FileUtil.file("C:\\Users\\Administrator\\Pictures\\kill.png");
        fileStorageService.of(file)
                .thumbnail(300, 200)
                .setSaveThFilename("url23_thumb")
                .setPlatform("local-1") //这里要指定本地存储平台local-1
                .upload();
    }

 @Test
    void test21(){
        //上传网络文件
        fileStorageService.of(
            URI.create("http://127.0.0.1:9090/fus1128/Tulips.jpg"))
                .setPlatform("local-1")
                .upload();
    }

请添加图片描述

测试上传到minio

@Autowired
    private FileStorageService fileStorageService;//注入实列

@Test
    void test1(){
        //上传本地文件
        File file = FileUtil.file("C:\\Users\\Administrator\\Pictures\\kill.png");
        fileStorageService.of(file)
                .thumbnail(300, 200)
                .setSaveThFilename("url23_thumb")
                .setPlatform("minio-2")  //因为yml里把minio-2设置了默认存储平台,所以这里setPlatform可以去掉
                .upload();
    }

 @Test
    void test21(){
        //上传网络文件
        fileStorageService.of(URI.create("http://127.0.0.1:9090/fus1128/Tulips.jpg"))
            .image(600,400) //以600*400存图
            // 指定 以特定完整 文件名 保存到minio
            .setSaveFilename("url23.jpg")

            //以300*200 存缩略图
            .thumbnail(300, 200)
            .setSaveThFilename("url23_thumb")

            //上传到bucket内的 te2023目录下
            .setPath("te2023/")
            .setPlatform("minio-2") //因为yml里把minio-2设置了默认存储平台,所以这里setPlatform可以去掉
            .upload();
    }

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web 页面布局:(二)float 浮动布局

web 页面布局&#xff1a;&#xff08;二&#xff09;float 浮动布局 页面宽度使用样式居中 使用浮动浮动元素外的剩余空间使用浮动的高度细节 页面宽度 在很早很早的时期&#xff0c;各大网站的底部都会有这么类似的一句声明&#xff1a;最佳分辨率 sss x ttt&#xff0c;比如…

web前端设计师的具体职责

web前端设计师的具体职责 web前端设计师负责将设计图转化成页面&#xff0c;并实现页面动态效果&#xff0c;并配合后端程序员嵌入数据。下面是学习啦小编整理的web前端设计师的具体职责。 web前端设计师的具体职责1 职责&#xff1a; 1.负责网站页面的整体美工创意、设计与…

redis 笔记

文章学习参考&#xff1a;Redis 教程 | 菜鸟教程 (runoob.com) 1、安装并执行 1.1 安装 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 点击下面的压缩文件下载&#xff0c;版本不一定是这个。 1.2 执行redis 打开cmd窗口&#xff0c;跳转到redis解压的…

void QWidget::stackUnder(QWidget *w)

Places the widget under w in the parent widgets stack. To make this work, the widget itself and w must be siblings. 在父窗口的栈中&#xff0c;放置widget在w下面。 为了生效&#xff0c;widget和w必须是兄弟。 什么意思呢&#xff1f; widget和w的父窗口必须是同一个…

计算机与网络发展的7个阶段【图解TCP/IP(笔记一)】

文章目录 计算机与网络发展的7个阶段批处理分时系统计算机之间的通信计算机网络的产生互联网的普及以互联网技术为中心的时代从“单纯建立连接”到“安全建立连接” 计算机与网络发展的7个阶段 批处理 所谓批处理&#xff0c;是指事先将用户程序和数据装入卡带或磁带&#xf…

从小白到大神:可能是最全的前端学习大纲

导读 俗话说得好&#xff1a;“不谋全局者不足谋一域。”前端开发是一个广泛而复杂的领域&#xff0c;需要掌握多方面的知识。 在之前的文章中&#xff0c;我们介绍了计算机领域的各种方向&#xff0c;以及前端在公司中的地位和日常工作内容&#xff0c;相信你对前端开发已经…

冰冰学习笔记:初识网络

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

剑指offer30天打卡活动

文章目录 Day1: 用两个栈实现队列包含min函数的栈 一、用两个栈实现队列OJ链接 本题思路&#xff1a;定义两个栈&#xff0c;&#xff08;Enqueue&#xff09;是用来存储入队的元素&#xff0c;&#xff08;Cnqueue&#xff09;用来出队的&#xff0c;那么如何进行操作呢&am…

Win10 显示WLAN不安全,并且链路速度54/54 (Mbps),通过K3C路由器修改协议解决,无线网卡连接速度只有54Mbps

省流 换个安全协议就好了。 使用有线等同隐私(WEP)或临时密钥完整性协议(TKIP)加密配置时&#xff0c;客户端设备的WiFi数据传输速率不会超过54Mbps&#xff0c; 问题 我用的是K3C路由器&#xff0c;今天跑百度网盘感觉很奇怪&#xff0c;突然就只有10MB/s了&#xff0c;感觉…

盖子的c++小课堂——第十八讲:栈

前言 OK呀&#xff0c;说到做到&#xff0c;我们的粉丝们也是很给力呀&#xff0c;终于破了400粉~~ 我太感动了aaaaaaaaaaaaaaaaaaaaaaaa 话不多说&#xff0c;我们直接开始&#xff01; 栈的定义 栈&#xff0c;是什么&#xff1f; 例1-弹夹 你见过手枪吗&#xff1f;它…

安装Node.js和创建Vue-cli工程

NodeJs中文网&#xff1a;下载 | Node.js (nodejs.org) 注意事项&#xff1a; 最好下载Node16版本&#xff0c;除非你后续使用的Vue-cli版本比较高&#xff0c;像我使用的Vue-cli3和4.1.1版本去创建工程&#xff0c;然后run运行会报错Error: error:0308010C:digital envelope …

echarts自定义legend样式

转载自&#xff1a; https://blog.csdn.net/changyana/article/details/126281275 目标样式&#xff1a; 使用legend中的formatter以及textStyle.rich legend: { // 对图形的解释部分orient: vertical,right: 10,y: center,icon: circle, // 添加formatter: function(name)…

绘制图形、ROI截取、高斯三角形

1、直线 2、圆形 3、椭圆 4、矩形 5、多边形 6、文字 //图形绘制 void test1() {Mat img Mat::zeros(Size(512, 512), CV_8UC3);//生成一个黑色图像用于绘制几何图形//绘制圆形circle(img, Point(50, 50), 25, Scalar(255, 255, 255), -1);//绘制一个实心圆circle(img, Point(…

Flutter 轮播图 flutter_swiper属性说明使用

今天分享的内容是关于图片轮播的实现&#xff0c;使用到的库是flutter_swiper&#xff0c;如果有出现空检查报错的&#xff0c;可以使用flutter_swiper_null_safety 轮播图效果如下&#xff1a; 先贴出基本参数详解&#xff1a; 参数说明itemBuilder列表的构造indicatorLayou…

Redis持久化之RDB和AOF

6、Redis持久化 6.1、背景 首先Redis作为一种缓存性数据库&#xff0c;如果缓存中有数据&#xff0c;他可以很快的把数据返回给客户&#xff0c;至于为什么他可以很快的将数据返回给客户&#xff0c;主要是因为他是一种内存性数据库&#xff0c;不需要额外的IO操作&#xff0…

报错:Destructuring assignments are not supported by current javaScript version

报错信息&#xff1a;当前JavaScript 版本不支持非结构化赋值 报错示例&#xff1a; 报错的原因是&#xff1a;这种语法是EcmaScript6才有的&#xff0c;以往的版本没有&#xff0c;修改一下javaScript的版本即可&#xff0c;方法如下&#xff1a;找到setting----->Languag…

接口自动化测试项目,让你像Postman一样编写测试用例,支持多环境切换、多业务依赖、数据库断言等

项目介绍 接口自动化测试项目2.0 软件架构 本框架主要是基于 Python unittest ddt HTMLTestRunner log excel mysql 企业微信通知 Jenkins 实现的接口自动化框架。 前言 公司突然要求你做自动化&#xff0c;但是没有代码基础不知道怎么做&#xff1f;或者有自动…

解密Vue 3:透过原理看框架,揭开它的神秘面纱

文章目录 1. 响应式系统2. 组件化3. 虚拟 DOM4. 编译器5. 插件系统附录&#xff1a;前后端实战项目&#xff08;简历必备&#xff09; 推荐&#xff1a;★★★★★ Vue 3 是一种用于构建用户界面的现代 JavaScript 框架。它基于响应式编程和虚拟 DOM 技术&#xff0c;并通过组件…

postgresql(一):使用psql导入数据库

使用psql导入数据库 1、概述2、具体问题3、总结 1、概述 大家好&#xff0c;我是欧阳方超。 听说postgresql越来越流行了&#xff1f;psql是一个功能强大的命令行工具&#xff0c;用于管理和操作PostgreSQL数据库。它提供了一个交互式环境&#xff0c;允许用户执行SQL查询、创…

MISA代码配置运行

MISA源码github链接&#xff1a;click here IDE: Pycharm专业版2022.2.2 python3.8 一、创建虚拟环境&#xff1a; 尝试 源码中给了environment.yml,可以用以下命令创建&#xff0c;但可能是由于某些库的版本问题&#xff0c;尝试失败。 conda env create -f environment.…