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

SpringBoot整合MinIO实现文件上传

使用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.lryc.cn/news/2392070.html

相关文章:

  • 基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践
  • 如何把 Microsoft Word 中所有的汉字字体替换为宋体?
  • 02. [Python+Golang+PHP]三数之和,多种语言实现最优解demo
  • MongoDB选择理由
  • 倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向​
  • 驱动开发(2)|鲁班猫rk3568简单GPIO波形操控
  • 《软件工程》第 3 章 -需求工程概论
  • VMware-MySQL主从
  • ArcGIS Pro 3.4 二次开发 - 几何
  • 2023-ICLR-ReAct 首次结合Thought和Action提升大模型解决问题的能力
  • Rust 开发的一些GUI库
  • 【第四十六周】文献阅读:从 RAG 到记忆:大型语言模型的非参数持续学习
  • 从智能提效到产品赋能的架构实践
  • 《Python 虚拟环境完全指南:如何管理项目依赖,避免版本冲突》
  • 微信小程序带数组参数跳转页面,微信小程序跳转页面带数组参数
  • 服务器开机自启动服务
  • 关于OT IIOT系统远程访问的零信任安全
  • 【Doris基础】Apache Doris vs 传统数据仓库:架构与性能的全面对比
  • 【VScode】python初学者的有力工具
  • Linux系统中为Qt项目封装一个udp客户端类
  • 443端口:HTTPS通信的安全基石
  • 宝塔安装WordPress程序
  • Agent 的7 中设计模式
  • OpenGAN:基于开放数据生成的开放集识别
  • 【node】Express创建服务器
  • 使用 OpenCV 实现哈哈镜效果
  • DeepSeek-R1-0528 模型最新发布:编程推理能力跃升
  • git仓库服务gogs详解
  • PaddleNLP 的文本分类项目
  • git 一台电脑一个git账户,对应多个仓库ssh