Servlet文件上传实战教程

需积分: 10 0 下载量 193 浏览量 更新于2024-09-09 收藏 216KB DOC 举报
"Servlet上传文件至服务器的技术实现及代码示例" 在Java Web开发中,Servlet是一种用于扩展服务器功能的Java类,它能够处理HTTP请求并返回响应。在Servlet中处理文件上传是一项常见的任务,通常涉及解析请求中的多部分数据(multipart/form-data),并将上传的文件保存到服务器的特定目录。Apache Commons FileUpload库提供了便捷的方式来处理这种类型的上传。 Apache Commons FileUpload库是Apache软件基金会的一个子项目,它提供了一套API,使得在Servlet中处理文件上传变得简单。下面是一个使用这个库的简单Servlet代码示例,展示了如何接收并处理上传的文件: ```java import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class HelloWorldServlet extends HttpServlet { // 设置上传文件的存储路径 private String uploadPath = "D:\\share\\JavaProjects\\drp\\apache-tomcat-5.5.26\\webapps\\drp4.0\\upload\\"; // 用于存放上传文件的目录 private File uploadPathFile; // 用于存放临时文件的目录 private File tempPathFile = new File("D:\\addnetFile\\tmp\\"); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 检查请求是否为multipart/form-data类型 if (!ServletFileUpload.isMultipartContent(req)) { return; } // 创建DiskFileItemFactory实例,用于设置临时文件存储路径 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 1024); // 设置内存阈值,超过则写入磁盘 factory.setRepository(tempPathFile); // 设置临时文件目录 // 创建ServletFileUpload对象,用于处理上传请求 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024 * 1024 * 5); // 设置最大上传文件大小 try { // 解析请求,获取FileItem对象 List<FileItem> items = upload.parseRequest(req); Iterator<FileItem> it = items.iterator(); while (it.hasNext()) { FileItem item = it.next(); // 如果是普通表单字段 if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); // 处理普通字段... } else { // 如果是文件域 String fileName = item.getName(); if (fileName != null && !fileName.trim().equals("")) { // 获取文件名,去掉路径 fileName = new File(fileName).getName(); // 生成目标文件的完整路径 String filePath = uploadPath + fileName; File targetFile = new File(filePath); // 将文件写入目标位置 item.write(targetFile); // 可以在此添加其他处理逻辑,如记录日志、发送邮件通知等 } } } } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,`doPost`方法首先检查请求是否包含多部分数据,然后创建`DiskFileItemFactory`和`ServletFileUpload`实例,设置文件上传的相关参数。接着,解析请求以获取`FileItem`对象,对于每个`FileItem`,如果是普通表单字段则处理其文本值,如果是文件域,则将文件保存到指定的`uploadPath`目录下。 在实际应用中,你可能需要对上传的文件进行进一步的验证,例如检查文件类型、大小,甚至进行安全过滤,防止恶意文件的上传。此外,文件保存路径应根据实际情况进行配置,避免硬编码,通常可以使用服务器环境变量或者系统属性来动态获取。 总结起来,Servlet处理文件上传主要涉及以下步骤: 1. 检查请求是否为multipart/form-data类型。 2. 创建DiskFileItemFactory和ServletFileUpload对象。 3. 解析请求,获取FileItem对象。 4. 遍历FileItem,处理文件上传或普通表单字段。 5. 将文件保存到服务器的指定目录。 通过使用Apache Commons FileUpload库,你可以方便地在Servlet中处理文件上传,实现用户友好的文件上传功能。