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服务器上,并启动服务器来运行项目。在浏览