1. 创建 HTML 表单(index.html):
<!DOCTYPE html>
<html>
<head>
<title>File Upload Form</title>
</head>
<body>
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<br />
<input type="submit" value="Upload" />
</form>
</body>
</html>
2. 编写 Servlet 处理文件上传(FileUploadServlet.java):
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/FileUploadServlet")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传文件的 Part 对象
Part filePart = request.getPart("file");
// 获取上传文件的输入流
InputStream fileContent = filePart.getInputStream();
// 保存上传文件
String fileName = getFileName(filePart);
Path filePath = Paths.get("uploads", fileName);
Files.copy(fileContent, filePath, StandardCopyOption.REPLACE_EXISTING);
response.getWriter().println("File " + fileName + " has been uploaded successfully!");
}
private String getFileName(Part part) {
String contentDispositionHeader = part.getHeader("content-disposition");
String[] elements = contentDispositionHeader.split(";");
for (String element : elements) {
if (element.trim().startsWith("filename")) {
return element.substring(element.indexOf('=') + 1).trim().replace("\"", "");
}
}
return "unknown";
}
}
3. 创建上传文件保存目录(uploads):
- 在项目的根目录下创建一个名为 "uploads" 的文件夹,用于存储上传的文件。
4. 配置 web.xml(可选):
- 在 web.xml 中添加 <multipart-config> 元素,以设置文件上传的配置参数。
<multipart-config>
<location>/path/to/temporary/directory</location>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
- 请根据具体需求配置相关参数,例如设置文件大小限制、临时目录等。
通过上述步骤,你可以在 Servlet 中实现简单的文件上传功能。请注意,实际项目中应该进行更多的错误处理、安全性检查,并根据具体需求配置更多的参数。此外,为了提高性能和可扩展性,也可以考虑使用第三方库,如 Apache Commons FileUpload。
转载请注明出处:http://www.pingtaimeng.com/article/detail/13648/Servlet