使用Apache Commons FileUpload实现Java文件上传下载

需积分: 5 7 下载量 117 浏览量 更新于2024-09-17 收藏 65KB DOC 举报
"java实现上传下载" 在Java Web开发中,文件上传和下载是常见的功能需求。Apache Commons FileUpload是一个强大的库,专门用于处理HTTP请求中的多部分数据,即文件上传。这个组件使得在JSP环境中集成文件上传功能变得简单易行。 首先,你需要从Apache官方网站(http://jakarta.apache.org/commons/fileupload/)下载Apache Commons FileUpload的jar包,通常是`commons-fileupload-1.0.jar`。下载完成后,将其复制到你的Tomcat服务器的`webapps/你的webapp/WEB-INF/lib`目录下,如果目录不存在,需要创建。 接着,创建一个Servlet来处理文件上传。以下是一个简单的`Upload.java` servlet示例: ```java import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.fileupload.*; public class Upload extends HttpServlet { private String uploadPath = "C:/upload"; // 上传文件的目录 private String tempPath = "C:/uploadtmp"; // 临时文件目录 public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { DiskFileUpload fu = new DiskFileUpload(); // 设置最大文件尺寸,这里是4MB fu.setSizeMax(4194304); // 4MB = 4 * 1024 * 1024 bytes // 设置缓冲区大小,这里是4kb fu.setSizeThreshold(4096); // 4kb = 4 * 1024 bytes List<FileItem> items = fu.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadPath + File.separator + fileName; File storeFile = new File(filePath); item.write(storeFile); // 可以在这里添加对上传文件的处理逻辑 } } } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,`DiskFileUpload`类用于解析HTTP请求,`setSizeMax`方法设置了允许的最大文件大小,`setSizeThreshold`设定了写入磁盘前的内存缓冲区大小。`parseRequest`方法解析请求并返回一个包含所有文件项的列表。对于每个非表单字段(即上传的文件),我们将其保存到指定的路径。 至于文件下载,通常会通过Servlet响应输出流来实现。以下是一个简单的文件下载Servlet的框架: ```java public class Download extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileName = request.getParameter("filename"); File file = new File("C:/download/" + fileName); if (file.exists()) { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) > 0) { response.getOutputStream().write(buffer, 0, length); } fis.close(); } else { response.getWriter().println("文件不存在"); } } } ``` 在这个下载Servlet中,我们获取请求参数中的文件名,检查文件是否存在,然后设置响应的MIME类型为"application/octet-stream",以表明这是一个二进制流。通过`Content-Disposition`头,我们可以告诉浏览器这是一个附件,需要以下载方式处理。最后,我们读取文件内容并写入响应输出流。 Apache Commons FileUpload库极大地简化了Java Web应用程序中的文件上传处理,而文件下载则可以通过设置适当的响应头和读取文件内容来实现。这些基础操作可以作为构建更复杂文件管理系统的起点。