使用Apache Commons FileUpload实现Java文件上传下载
需积分: 5 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应用程序中的文件上传处理,而文件下载则可以通过设置适当的响应头和读取文件内容来实现。这些基础操作可以作为构建更复杂文件管理系统的起点。
2019-04-17 上传
2012-11-05 上传
2010-07-30 上传
2021-01-19 上传
2013-09-05 上传
2014-02-13 上传
2020-08-27 上传
2008-07-03 上传
2020-08-30 上传
lixinyouapple
- 粉丝: 1
- 资源: 16
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建