Java jsp + minio 实现 文件上传

好的,让我们一步一步地实现一个基于 Java、JSP 和 MinIO 的文件上传功能。我们将使用传统的 Java Web 应用结构,而不是 Spring Boot。

1. 设置 MinIO 服务器

确保已经安装并运行了 MinIO 服务器。可以从 MinIO 官方网站 下载并安装 MinIO。

启动 MinIO 服务器
minio server /data

默认情况下,MinIO 会在 http://localhost:9000 上运行。

2. 创建 Java Web 应用

项目结构
MyWebApp/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── MyServlet.java
│   │   ├── resources/
│   │   │   └── log4j.properties
│   │   └── webapp/
│   │       ├── WEB-INF/
│   │       │   └── web.xml
│   │       ├── index.jsp
│   │       └── upload.jsp
└── pom.xml
添加依赖

pom.xml 中添加 MinIO 和 Servlet 的依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>MyWebApp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!-- MinIO Client -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.3.1</version>
        </dependency>

        <!-- Servlet API -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>MyWebApp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
            </plugin>
        </plugins>
    </build>
</project>
配置 MinIO

src/main/resources/log4j.properties 中配置日志:

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

3. 创建 Servlet 处理文件上传

创建 MyServlet.java

src/main/java/com/example/ 目录下创建 MyServlet.java

package com.example;

import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;

@WebServlet("/upload")
public class MyServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private static final String MINIO_ENDPOINT = "http://localhost:9000";
    private static final String MINIO_ACCESS_KEY = "YOUR_ACCESS_KEY";
    private static final String MINIO_SECRET_KEY = "YOUR_SECRET_KEY";
    private static final String BUCKET_NAME = "mybucket";

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if (!ServletFileUpload.isMultipartContent(request)) {
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }

        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            List<FileItem> items = upload.parseRequest(request);
            for (FileItem item : items) {
                if (!item.isFormField()) {
                    String fileName = UUID.randomUUID().toString() + "_" + item.getName();
                    InputStream fileStream = item.getInputStream();

                    MinioClient minioClient = MinioClient.builder()
                            .endpoint(MINIO_ENDPOINT)
                            .credentials(MINIO_ACCESS_KEY, MINIO_SECRET_KEY)
                            .build();

                    if (!minioClient.bucketExists(BUCKET_NAME)) {
                        minioClient.makeBucket(BUCKET_NAME);
                    }

                    minioClient.putObject(PutObjectArgs.builder()
                            .bucket(BUCKET_NAME)
                            .object(fileName)
                            .stream(fileStream, fileStream.available(), -1)
                            .contentType(item.getContentType())
                            .build());

                    response.getWriter().write("File uploaded successfully: " + fileName);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            response.getWriter().write("Failed to upload file");
        }
    }
}

4. 创建 JSP 页面

创建 index.jsp

src/main/webapp/ 目录下创建 index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>File Upload</title>
</head>
<body>
    <h1>File Upload</h1>
    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <br /><br />
        <input type="submit" value="Upload" />
    </form>
</body>
</html>

5. 配置 web.xml

src/main/webapp/WEB-INF/ 目录下创建 web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.example.MyServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/upload</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

6. 运行项目

部署到 Tomcat
  1. 将项目打包成 WAR 文件:
mvn clean package
  1. 将生成的 WAR 文件部署到 Tomcat 的 webapps 目录。
  2. 启动 Tomcat 服务器:
bin/startup.sh
  1. 打开浏览器,访问 http://localhost:8080/MyWebApp,应该能看到文件上传页面。

7. 测试

选择一个文件并点击“Upload”按钮,文件将被上传到 MinIO 服务器,并显示上传成功的信息。

以上就是使用 Java、JSP 和 MinIO 实现文件上传功能的完整步骤。可以根据实际需求进行扩展和优化。

上一篇:C++ 匿名对象(没有名字的对象,类似于临时对象)-代码


下一篇:JavaScript错误对象研究及基本介绍02_ReferenceError_SyntaxError_TypeError_URIError