在 Servlet 中实现文件上传涉及一些步骤,包括创建 HTML 表单、编写 Servlet 处理文件上传,以及配置 web.xml。以下是一个简单的文件上传示例:

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