SpringBoot整合MinIO实现文件上传

article/2025/8/13 7:03:05

使用Spring Boot与JSP和MinIO(一个开源对象存储系统,兼容Amazon S3)进行集成,您可以创建一个Web应用来上传、存储和管理文件。以下是如何将Spring Boot、JSP和MinIO集成的基本步骤:

这个是minio正确启动界面

这个是minio 后台管理的界面

1. 创建Spring Boot项目

  • 使用Spring Initializr创建一个Spring Boot项目,并添加以下依赖:
    • Spring Web(用于JSP支持)
    • Spring Boot DevTools(可选,方便开发调试)
    • MinIO的依赖(使用MinIO Java SDK)
    • Thymeleaf或JSP支持

2. 添加MinIO依赖

在pom.xml中添加MinIO的依赖。

xmlCopy Code

<dependencies>

    <dependency>

        <groupId>io.minio</groupId>

        <artifactId>minio</artifactId>

        <version>8.3.4</version>

    </dependency>

    <!-- 添加Spring Boot Web依赖 -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <!-- 如果使用JSP -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-tomcat</artifactId>

        <scope>provided</scope>

    </dependency>

    <dependency>

        <groupId>org.apache.tomcat.embed</groupId>

        <artifactId>tomcat-embed-jasper</artifactId>

        <version>9.0.54</version>

    </dependency>

    <dependency>

        <groupId>org.apache.jasper</groupId>

        <artifactId>apache-jsp</artifactId>

        <version>9.0.54</version>

    </dependency>

</dependencies>

3. 配置MinIO

在application.properties或application.yml中配置MinIO连接信息。

propertiesCopy Code

minio.endpoint=http://localhost:9000

minio.access-key=minioadmin

minio.secret-key=minioadmin

minio.bucket-name=mybucket

4. MinIO配置类

创建一个MinioConfig类来配置MinIO客户端。

javaCopy Code

import io.minio.MinioClient;

import io.minio.errors.MinioException;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class MinioConfig {

    @Value("${minio.endpoint}")

    private String endpoint;

    @Value("${minio.access-key}")

    private String accessKey;

    @Value("${minio.secret-key}")

    private String secretKey;

    @Value("${minio.bucket-name}")

    private String bucketName;

    @Bean

    public MinioClient minioClient() throws MinioException {

        try {

            MinioClient minioClient = MinioClient.builder()

                .endpoint(endpoint)

                .credentials(accessKey, secretKey)

                .build();

           

            // Check if bucket exists, otherwise create it

            if (!minioClient.bucketExists(bucketName)) {

                minioClient.makeBucket(bucketName);

            }

           

            return minioClient;

        } catch (Exception e) {

            throw new MinioException("Error while setting up MinIO", e);

        }

    }

}

service方法改造 ,名称 重新命名

5. 创建Controller

在Spring Boot中创建一个Controller来处理文件上传、下载等操作。

javaCopy Code

import io.minio.MinioClient;

import io.minio.errors.MinioException;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

@Controller

public class FileController {

    @Autowired

    private MinioClient minioClient;

    @Value("${minio.bucket-name}")

    private String bucketName;

    @GetMapping("/")

    public String index() {

        return "index";

    }

    @PostMapping("/upload")

    public String uploadFile(@RequestParam("file") MultipartFile file, Model model) {

        try {

            InputStream fileInputStream = file.getInputStream();

            String fileName = file.getOriginalFilename();

            // Upload the file to MinIO

            minioClient.putObject(bucketName, fileName, fileInputStream, file.getContentType());

            model.addAttribute("message", "File uploaded successfully: " + fileName);

        } catch (Exception e) {

            model.addAttribute("message", "File upload failed: " + e.getMessage());

        }

        return "index";

    }

}

6. JSP页面

在src/main/webapp/WEB-INF/jsp/目录下创建index.jsp页面,允许用户上传文件。

jspCopy Code

<!DOCTYPE html>

<html>

<head>

    <title>MinIO File Upload</title>

</head>

<body>

    <h1>Upload File to MinIO</h1>

    <form action="/upload" method="post" enctype="multipart/form-data">

        <input type="file" name="file" required />

        <button type="submit">Upload</button>

    </form>

    <h2>${message}</h2>

</body>

</html>

7. 运行Spring Boot应用

通过mvn spring-boot:run或直接运行@SpringBootApplication类来启动Spring Boot应用。

  • 确保MinIO服务器已启动并运行(可以通过MinIO的官方Docker镜像来快速启动)。

8. 访问应用

  • 打开浏览器访问 http://localhost:8080/。
  • 上传文件,文件会被存储到MinIO中指定的桶中。
  • 运行结果

9. 进一步扩展

  • 添加文件下载、删除功能。
  • 显示存储在MinIO中的文件列表。
  • 处理文件大小限制、文件类型检查等。

通过这种方式,你可以成功地将Spring Boot、JSP和MinIO集成,实现文件上传和存储的功能。


http://www.hkcw.cn/article/whtHiDajqP.shtml

相关文章

LLaMaFactory 微调QwenCoder模型

步骤一&#xff1a;准备LLamaFactory环境 首先,让我们尝试使用github的方式克隆仓库: git config --global http.sslVerify false && git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git # 创建新环境&#xff0c;指定 Python 版本&#xff08;以 3.…

男子戴人皮面具偷了15万首饰现金 反侦查高手落网

5月29日,盐城市公安局盐南高新区分局新都派出所接到多个小区居民报警,称家中金条、金首饰丢失。警方迅速介入调查,发现案发前有一名男子在案发现场周边多次徘徊,并且面部反光,疑似戴着面具踩点。经过持续分析,最终锁定了犯罪嫌疑人的身份。5月23日,民警周密部署后成功抓…

园长回应幼儿园举办幼儿龙舟赛 雨中竞技展现传统文化魅力

广东汕头澄海区溪南西社幼儿园近日举办了一场特别的赛龙舟活动,视频在网络上引起了广泛关注。孩子们在细雨天身穿救生衣,在泳池中划着特制尺寸的龙舟,争夺冠军,泳池边的观众打着伞为他们助威呐喊。园长张晓燕透露,决赛于5月28日下午3点举行,当天有不少村民观赛,村委会成…

基于亚博K210开发板——物体检测测试

开发板 亚博K210开发板 实验目的 本次测试主要学习 K210 如何物体检测&#xff0c;然后通过 LCD 显示屏实时框出检测物体然后以不同颜色标记名称。 实验元件 OV2640 摄像头/OV9655 摄像头/GC2145 摄像头、LCD 显示屏 硬件连接 K210 开发板出厂默认已经安装好摄像头和显…

Glide源码解析

前言 Glide是一款专为Android设计的开源图片加载库。有以下特点&#xff1a;1.支持高效加载网络、本地及资源图片&#xff1b;2.具备良好的缓存策略及生命周期管理策略&#xff1b;3.提供了简易的API和强大的功能。本文将对其源码进行剖析。 基本使用 dependencies {compile …

01.认识Kubernetes

什么是Kubernets 套用官方文档对Kubernetes的定义&#xff0c;翻译成中文的意思是&#xff1a; Kubernetes&#xff0c;也称为k8&#xff0c;是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。 它将组成应用程序的容器分组为逻辑单元&#xff0c;以便于管理和发现…

印把PL-15残骸给日本 中国有防备吗 国防部回应让16亿人松口气

印巴冲突虽然已经结束20多天,但其影响仍在持续。印度方面将此前获得的PL-15空空导弹残骸交由日本团队研究,外界对此表示担忧,担心技术泄密或被反向研制。针对这一情况,国防部的回应让许多人松了一口气。在印巴冲突期间,两国分别使用中式武器和西式武器进行对抗,展示了各自…

美的集团董事长兼总裁再谈小米 战略上已输

5月30日,美的集团董事长兼总裁方洪波在2024年度股东大会上回应投资者提问时表示,小米进入家电业在战略上已失败。今年小米在空调市场掀起低价竞争,其大家电业务一季度收入同比翻倍增长。此前,方洪波曾表示“在战术上重视小米、在战略上不惧怕小米”。针对这一表述,他解释说…

莫迪想对中企下黑手的动机是什么 稀土牌反制威力显现

莫迪政府试图对中企采取行动,其动机和影响引发关注。莫迪政府的外交政策逐渐极端化,最近要求监控设备商提交硬件、软件和源代码供评估,声称是为了防止所谓的“安全问题”。这显然针对的是中国企业在印度市场的份额,如海康威视、小米和大华等。这种要求无理且超出正常安全审…

余承东展示尊界S800新功能 挥手关门科技感十足

鸿蒙智行的百万级豪华轿车尊界 S800 将于今晚正式发布。华为常务董事、终端BG董事长余承东在微博上持续预热这款新车,并发布了一则新视频,展示了尊界S800挥手关门的新功能。视频中,尊界S800不仅能够自动开门,乘客落座后向内挥手,车门还能自动轻轻关上。此外,视频还展示了…

摄像头探测器APP:守护隐私的防偷拍利器

在当今社会&#xff0c;隐私保护成为越来越多人关注的焦点。无论是入住酒店、民宿&#xff0c;还是在其他公共场所&#xff0c;我们都有可能面临被偷拍的风险。摄像头探测器APP的出现&#xff0c;为用户提供了一种便捷、高效的检测手段&#xff0c;能够有效识别并防范潜在的偷拍…

8天Python从入门到精通【itheima】-54~56

目录 54节-函数传入的参数 1.函数传入数据的定义和功能 2.函数传入参数的实例 3.代码实战 4.形参和实参的概念 5.函数传入参数的注意事项 6.小节总结 55节-案例练习-升级版自动查核酸 1.案例需求 2.代码实战 56节-函数的返回值定义语法 1.学习目标 2.返回值的生活案…

ROS云课基础篇-02-C++-250529

ROS云课基础篇-01-Linux-250529-CSDN博客 基于Zsh的C机器人编程基础实验报告 ——结合AutomaticAddison教程与ROS开发环境 一、实验目标 掌握C基础语法及面向对象编程&#xff08;OOP&#xff09;在机器人开发中的应用配置Zsh终端环境&#xff0c;结合ROS Kinetic实现C机器人…

黄金现货期货双跌 市场避险情绪降温

5月30日,国际黄金价格在经历前一日的回调和反弹后依旧低迷。5月29日,国际黄金市场遭遇显著回调,现货黄金价格盘中一度下探至3245.19美元/盎司,创本周以来新低,COMEX黄金期货价格也同步回落。当天伦敦金现货价格跌破3330美元/盎司,一度触及3245.19美元/盎司的新低。截至当…

青岛即墨通报店铺涉嫌传销 市场监管部门发布情况

本文转自【即墨市场监管】;5月30日,即墨市场监管发布情况通报:责任编辑:0764

成都发生持刀伤人案 警方通报 因感情纠纷引发

成都市公安局锦江区分局5月30日发布警情通报,当天下午3点左右,中纱帽街8号负一层发生一起持刀伤人事件。警方接到报警后迅速赶到现场,并控制了犯罪嫌疑人陆某某,他今年26岁。经初步调查,陆某某因感情纠纷前往前女友胡某某的工作单位。胡某某今年24岁,在与陆某某发生口角后…

A股打破“端午劫”魔咒?专家建议 持股过节乐观看待

5月30日,A股迎来端午节前最后一个交易日,整体走势较为平淡。上证指数、深证成指和创业板指均呈现窄幅震荡,市场涨停个股不足50只。体育、养殖、银行等板块涨幅居前,而近期火爆的可控核聚变概念出现回调。回顾过去十年A股在端午节前后的表现,整体涨少跌多,因此有“端午劫”…

美国防长拿什么来取信亚洲国家 承诺可信度受质疑

第22届香格里拉对话会将于5月30日至6月1日在新加坡举行。美国国防部长赫格塞思计划在会议上发表演讲,阐述美国在“印太地区”的防务政策。自上任以来,赫格塞思主要关注国内问题,抵制军队中的多元、平等与包容政策,并对媒体持批评态度。此次访问亚洲,他将试图向该地区的国防…

App识别安卓系统弹授权框包含某段文字-并自动点击确定按钮

安卓App识别手机系统弹授权框包含某段文字-并自动点击确定按钮 --蓝牙电话App自动部署 上一篇&#xff1a;手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席 下一篇&#xff1a;编写中。 一、前言 蓝牙电话方案中&#xff0c;我们提供了将手机通话的语音拦截后转发到…

上海高考报名人数逆势上涨 招生计划调整引关注

2025年上海秋季高考考生人数预计将超过6万人,比2024年增加近万人。上海市教育考试院透露了这一数据,并表示已经与全国高校沟通在沪招生计划增量。预计今年在沪招生的本科计划数将有所增加,但受限于高校教育资源承载力等因素,本科计划增量不一定能完全匹配生源的增长。对于今…