Servlet 文件上传学习笔记

一、前言

Servlet 文件上传是 Java Web 开发中常用的功能,其可以让用户上传文件到服务端,并且在服务端进行相应的处理。本文将介绍 Servlet 文件上传的基本原理以及实现方式。

二、文件上传的基本原理

在传统的 HTTP 请求中,客户端向服务端发送请求时,只能向服务端传递文本数据,而不能直接传递文件数据。为了实现文件上传,我们需要借助一些特殊的技术。

常用的实现方式如下:

  1. 表单提交方式

在前端页面上提供一个表单,让用户选择需要上传的文件,然后将表单数据以 POST 方式提交给服务端。

  1. Ajax 方式

使用 Ajax 技术,将文件数据通过 XMLHttpRequest 对象发送给服务端,实现文件上传。

  1. Flash 或者 Silverlight

使用 Flash 或者 Silverlight 技术,将文件数据发送给服务端,在服务端进行处理。

这里我们使用表单提交的方式来实现文件上传。

三、代码示例

1. 编写 HTML 页面

htmlCopy Code
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="/fileUpload" method="post" enctype="multipart/form-data"> <input type="file" name="file"><br> <input type="submit" value="上传"> </form> </body> </html>

在 HTML 页面中,我们添加了一个表单,该表单的 action 属性指向服务端的文件上传处理程序。表单中添加一个 file 类型的输入框,用于选择需要上传的文件。

2. 编写 Servlet 程序

javaCopy Code
@WebServlet(name = "FileUploadServlet", urlPatterns = "/fileUpload") @MultipartConfig // 注解表示当前 Servlet 支持文件上传 public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取上传的文件 Part filePart = request.getPart("file"); String fileName = filePart.getSubmittedFileName(); // 将文件保存到指定目录下 String uploadPath = "C:/uploads/"; File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdir(); } File file = new File(uploadPath + fileName); try (InputStream inputStream = filePart.getInputStream(); OutputStream outputStream = new FileOutputStream(file)) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } // 返回上传结果 response.getWriter().append("文件上传成功!").flush(); } }

在 Servlet 中,我们首先通过 @MultipartConfig 注解表示当前 Servlet 支持文件上传。然后,在 doPost 方法中,我们通过 request.getPart("file") 方法获取上传的文件,然后将文件保存到指定目录中。

四、总结

本文简单介绍了 Servlet 文件上传的基本原理和实现方式,以及一个简单的文件上传代码示例。在实际项目中,需要根据具体需求进行相应的修改和扩展。