SpringBoot整合MinIO实现文件上传

news2025/6/1 0:57:34

使用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.coloradmin.cn/o/2392070.html

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

相关文章

基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践

前引&#xff1a; 在软件开发中&#xff0c;时间与日期的处理是基础但极具挑战性的任务。传统的手工日期运算逻辑往往面临闰年规则、月份天数动态变化、时区转换等复杂场景的容错难题&#xff0c;且代码冗余度高、可维护性差。本文将深入探讨如何利用C的面向对象特性与成员函数…

如何把 Microsoft Word 中所有的汉字字体替换为宋体?

Ctrl H &#xff0c;然后&#xff0c;点击更多&#xff0c;勾选使用通配符&#xff0c;查找内容中填入 [一-龥]{1,}&#xff0c; 这是 Word 通配符匹配汉字的经典写法&#xff08;匹配 Unicode 范围内的 CJK 汉字&#xff09;。 然后&#xff0c; “替换为”留空&#xff0c;点…

02. [Python+Golang+PHP]三数之和,多种语言实现最优解demo

一、问题描述&#xff1a;三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中…

倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向​

倚光科技二元衍射面加工技术&#xff08;呈现出细腻的光碟反射纹路&#xff09; 在光学元件制造领域&#xff0c;二元衍射面的加工技术一直是行业发展的关键驱动力之一。其精准的光相位调制能力&#xff0c;在诸多前沿光学应用中扮演着不可或缺的角色。然而&#xff0c;长期以来…

驱动开发(2)|鲁班猫rk3568简单GPIO波形操控

上篇文章写了如何下载内核源码、编译源码的详细步骤&#xff0c;以及一个简单的官方demo编译&#xff0c;今天分享一下如何根据板子的引脚写自己控制GPIO进行高低电平反转。 想要控制GPIO之前要学会看自己的引脚分布图&#xff0c;我用的是鲁班猫RK3568&#xff0c;引脚分布图如…

《软件工程》第 3 章 -需求工程概论

在软件工程的开发流程中&#xff0c;需求工程是奠定项目成功基础的关键环节。它专注于获取、分析、定义和管理软件需求&#xff0c;确保开发出的软件能真正满足用户需求。接下来&#xff0c;我们将按照目录内容&#xff0c;结合 Java 代码和实际案例&#xff0c;深入讲解需求工…

VMware-MySQL主从

MySQL主从 服务器信息 服务器类型角色主机地址主机名称虚拟机master192.168.40.128test-1虚拟机slave192.168.40.129test-2 Master 配置&#xff08;192.168.40.128&#xff09; 删除自动生成的配置 /var/lib/mysql/auto.cnf [roottest-1 ~]# rm -rf /var/lib/mysql/auto.…

2023-ICLR-ReAct 首次结合Thought和Action提升大模型解决问题的能力

关于普林斯顿大学和Google Research, Brain Team合作的一篇文章, 在语言模型中协同Reasoning推理和Action行动。 论文地址&#xff1a;https://arxiv.org/abs/2210.03629 代码&#xff1a;https://github.com/ysymyth/ReAct.git 其他复现 langchain &#xff1a;https://pytho…

Rust 开发的一些GUI库

最近考虑用Rust干点什么&#xff0c;于是搜集了下资料——根据2025年最新调研结果和社区实践&#xff0c;Rust GUI库生态已形成多个成熟度不同的解决方案。以下是当前主流的GUI库分类及特点分析&#xff0c;结合跨平台支持、开发体验和实际应用场景进行综合评估&#xff1a; 一…

【第四十六周】文献阅读:从 RAG 到记忆:大型语言模型的非参数持续学习

目录 摘要Abstract从 RAG 到记忆&#xff1a;大型语言模型的非参数持续学习研究背景方法论1. 离线索引&#xff08;Offline Indexing&#xff09;2. 在线检索&#xff08;Online Retrieval&#xff09;具体细节 创新性实验结果局限性总结 摘要 本论文旨在解决当前检索增强生成…

从智能提效到产品赋能的架构实践

摘要 本文深入探讨了企业级系统从智能化提效阶段向产品赋能阶段演进的架构实践路径。通过分析传统架构的局限性,提出了以用户价值为导向的现代化架构设计理念,并结合实际案例展示了如何构建可扩展、高可用、智能化的产品架构体系。 1. 引言 在数字化转型的浪潮中,企业技术…

关于OT IIOT系统远程访问的零信任安全

什么是OT & IIOT&#xff1f;—— 工业领域的“操作基石”与“智能升级” 在工业数字化转型的浪潮中&#xff0c;OT&#xff08;运营技术&#xff09;与IIoT&#xff08;工业物联网&#xff09;是两个核心概念。前者是工业生产的“神经中枢”&#xff0c;后者是驱动智能升…

【Doris基础】Apache Doris vs 传统数据仓库:架构与性能的全面对比

目录 1 引言 1.1 传统数据仓库的发展 1.2 现代分析型数据库的崛起 2 核心架构对比 2.1 传统数据仓库的架构 2.2 Doris的架构设计 3 关键技术差异 3.1 存储引擎对比 3.2 查询执行对比 3.3 数据摄入方式对比 4 性能与扩展性对比 4.1 性能基准对比 4.2 扩展性对比 5…

【VScode】python初学者的有力工具

还记得23年11月&#xff0c;我还在欣喜Spyder像Rstudio一样方便。 但苦于打开软件打开太卡、太耗时&#xff08;初始化-再加载一些东西&#xff09;&#xff0c;一度耗费了我学习的热情。 就在24年5月份&#xff0c;别人推荐下发现了一个更加轻量级、方便又快速的ID&#xff0…

443端口:HTTPS通信的安全基石

在互联网通信中&#xff0c;端口是数据传输的虚拟通道&#xff0c;每个端口对应特定的服务或协议。其中&#xff0c;443端口 作为 HTTPS协议 的默认端口&#xff0c;在现代网络安全中扮演着至关重要的角色。 一、443端口的核心作用 HTTPS加密通信 443端口是HTTPS&#xff08;…

宝塔安装WordPress程序

宝塔安装WordPress程序 一、提前准备1&#xff0c;下载WordPress2&#xff0c;在宝塔创建站点 二、部署项目1&#xff0c;上传下载的wordpress压缩包至创建的项目根目录下并解压 三、wordpress安装1&#xff0c;在浏览器打开创建的网站2&#xff0c;开始按照流程安装配置数据库…

Agent 的7 中设计模式

这里写自定义目录标题 建立有效的Agent什么是Agent&#xff1f;何时&#xff08;以及何时不使用&#xff09;使用代理何时以及如何使用框架构建块、工作流和Agent构建模块&#xff1a;增强型LLM(The augmented LLM)工作流程&#xff1a;提示链接(Prompt chaining)工作流程&…

OpenGAN:基于开放数据生成的开放集识别

简介 简介&#xff1a;这次学习的OpenGAN主要学习一个思路&#xff0c;跳出传统GAN对于判断真假的识别到判断是已知种类还是未知种类。重点内容不在于代码而是思路&#xff0c;会简要给出一个设计的代码。 论文题目&#xff1a;OpenGAN: Open-Set Recognition via Open Data …

【node】Express创建服务器

Express是基于Node.js平台&#xff0c;快速、开放、极简的Web开发框架。基于http的express是专门用来创建web服务器的&#xff0c;可以极大的提高开发效率。 Express的创建的服务器 1 web网站服务器 专门对外提供web网页资源的服务器 2 Api接口服务器 专门对外提供Api接口的服…

使用 OpenCV 实现哈哈镜效果

在计算机视觉和图像处理领域&#xff0c;OpenCV 提供了非常强大的图像几何变换能力&#xff0c;不仅可以用于纠正图像&#xff0c;还能制造各种“有趣”的视觉效果。今天&#xff0c;我们就来实现一个经典的“哈哈镜”效果&#xff0c;让图像像在游乐园里一样被拉伸、压缩、扭曲…