Java Form表单上传文件

本文将介绍如何使用Java编写代码来实现一个基本的表单文件上传功能。通过这个功能,用户可以通过一个HTML表单选择文件并将文件上传到服务器上。我们将使用Java的servlet技术来处理这个功能。

准备工作

在开始编写代码之前,需要确保你已经安装了以下工具和环境:

  • Java Development Kit (JDK)
  • Apache Tomcat
  • Eclipse IDE (或任何其他Java IDE)

创建项目和文件

首先,在Eclipse IDE中创建一个新的Dynamic Web Project。为项目命名为FileUpload,选择Tomcat作为目标运行时环境。创建项目后,我们将开始编写Java代码和HTML表单。

编写HTML表单

在WebContent文件夹下创建一个新的HTML文件,命名为index.html。在该文件中,添加以下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload Form</title>
</head>
<body>
<h2>File Upload Form</h2>
<form action="UploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="file" /><br/><br/>
    <input type="submit" value="Upload" />
</form>
</body>
</html>

该表单包含一个文件选择输入框和一个提交按钮。表单的action属性指定了将表单数据提交到的目标URL,在本例中为UploadServlet。

创建Java Servlet

在src文件夹下创建一个新的package,命名为com.fileupload。在该package下创建一个新的Java类,命名为UploadServlet。在该类中,添加以下代码:

package com.fileupload;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
        maxFileSize = 1024 * 1024 * 10, // 10MB
        maxRequestSize = 1024 * 1024 * 50) // 50MB
public class UploadServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String uploadPath = getServletContext().getRealPath("") + File.separator + "uploads";
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }

        try {
            List<Part> parts = (List<Part>) request.getParts();
            for (Part part : parts) {
                String fileName = extractFileName(part);
                part.write(uploadPath + File.separator + fileName);
            }
            request.setAttribute("message", "File(s) uploaded successfully!");
        } catch (Exception ex) {
            request.setAttribute("message", "File(s) upload failed due to an error: " + ex);
        }

        request.getRequestDispatcher("result.jsp").forward(request, response);
    }

    private String extractFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String item : items) {
            if (item.trim().startsWith("filename")) {
                return item.substring(item.indexOf("=") + 2, item.length() - 1);
            }
        }
        return "";
    }
}

在这个Servlet类中,我们使用了@MultipartConfig注解来指定要处理的请求类型是多部分表单数据,即文件上传。在doPost()方法中,我们首先获取要上传的文件的存储路径,然后创建一个文件夹来保存上传的文件。接下来,我们使用request.getParts()方法获取所有上传的文件,然后将它们写入到指定的存储路径中。最后,我们将文件上传结果信息存储在request的attribute中,并将请求转发到result.jsp页面。

创建结果页面

在WebContent文件夹下创建一个新的JSP文件,命名为result.jsp。在该文件中,添加以下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload Result</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

这个JSP文件简单地显示了文件上传结果信息,它使用了EL表达式来获取之前在Servlet中设置的message属性的值。

部署和运行

完成以上代码的编写后,我们需要将项目部署到Tomcat服务器上,并启动服务器来运行项目。在浏览