使用Apache Commons FileUpload实现文件上传步骤详解

需积分: 9 2 下载量 164 浏览量 更新于2024-09-14 收藏 293KB PDF 举报
"Apache Commons FileUpload 实现文件上传的教程" Apache Commons FileUpload 是一个非常实用的 Java 库,专门用于处理 HTTP 协议中的多部分(multipart)数据,即文件上传功能。它依赖于 Apache Commons IO 库,因此在使用 FileUpload 之前,需要确保已经包含了 Commons IO 的 jar 包,例如本文中使用的版本为 commons-io-1.3.2.jar。 在 Web 应用程序中,为了使用 Commons FileUpload,你需要将 `commons-fileupload.jar` 文件放入 WEB-INF\lib 目录下。这样,你的应用就能访问到 FileUpload 提供的类和方法。对于示例环境,这里使用的是 Eclipse 3.3 和 MyEclipse 6.0 集成开发环境。 以下是使用 Commons FileUpload 进行文件上传的基本步骤: 1. 创建 FileItemFactory:这个工厂类负责创建 FileItem 对象,这些对象代表了上传表单中的各个字段,包括文件字段和其他普通文本字段。 2. 创建 ServletFileUpload:使用 FileItemFactory 创建一个 ServletFileUpload 实例,这个类能够解析来自 HTTP 请求的多部分数据。 3. 解析请求:调用 ServletFileUpload 的 `parseRequest` 方法,传入 HttpServletRequest 对象,以获取上传的 FileItem 对象列表。 4. 处理 FileItem 对象:遍历 FileItem 列表,通过 `isFormField()` 方法判断当前项是否为普通表单字段,如果是,可以使用 `getString()` 获取其内容;如果是一个文件,可以通过 `getName()` 获取文件名,然后将文件内容写入服务器指定的路径。 以下是一个简单的 JSP 示例代码片段,展示了如何在 JSP 页面中创建一个支持文件上传的表单,并在服务器端的 JSP 或 Servlet 中处理上传: demo1.html ```html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>File Upload Example</title> </head> <body> <!-- 使用 multipart/form-data 表单类型 --> <form name="myform" action="demo1.jsp" method="post" enctype="multipart/form-data"> Your Name:<br> <input type="text" name="name" size="15"><br> File:<br> <input type="file" name="myfile"><br> <br> <input type="submit" name="submit" value="Commit"> </form> </body> </html> ``` demo1.jsp ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" %> <% // 引入需要的库 import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; // 创建 FileItemFactory FileItemFactory factory = new DiskFileItemFactory(); // 创建 ServletFileUpload 实例 ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 处理文件上传 String fileName = item.getName(); // 写入文件到服务器的路径 File uploadedFile = new File("/path/to/save/uploaded/files/" + fileName); item.write(uploadedFile); } else { // 处理普通表单字段 String formFieldName = item.getFieldName(); String fieldValue = item.getString("UTF-8"); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } %> ``` 在这个示例中,`demo1.jsp` 接收上传的文件,并将其保存到服务器指定的位置。同时,它还能够处理其他非文件类型的表单字段。请注意,为了防止恶意文件上传,你应该添加额外的安全检查,如检查文件类型、大小等。 这个简单的示例只是 Commons FileUpload 功能的冰山一角。它还提供了更高级的功能,比如设置临时目录、自定义文件存储策略、处理大文件分块上传等。了解并熟练使用 Commons FileUpload 可以帮助你更高效、安全地实现在 Java Web 应用中的文件上传功能。