java 实现大文件上传
文件上传一直是B/S结构中很重要的一项功能,在java中并没有很好的实现文件上传的类包,因此出现了一些开源的组件,Smartupload ,commons-fileupload,还有国内的一个"牛人"的(不好意思叫不上名字来),这几个组件中Smartupload 出来的时候应该最早,不过现在已经不再有新的版本出现,还有一个不足的地方就是Smartupload 支持上传的文件最大在100M左右,这可满足不了客户的需求,听说commons-fileupload不错,经过几番测试终于搞定,下面是代码,3个jsp文件 upload.jsp success.jsp error.jsp 一个action类 ### Java实现大文件上传知识点详解 #### 一、文件上传的重要性及Java中的处理方式 文件上传作为B/S架构中的一项核心功能,在很多应用场景下都扮演着至关重要的角色。例如,在线文档分享、用户资料上传、多媒体文件存储等方面,都需要通过Web端实现文件的上传与管理。然而,在Java Web开发中,并没有提供直接且高效的文件上传解决方案,因此开发者通常会选择一些开源库来辅助完成这一任务。 #### 二、常见的Java文件上传组件及其特点 1. **Smartupload**: - **优点**:出现较早,有一定的社区支持。 - **缺点**:不再更新新版本;支持的最大文件大小有限(约100MB),无法满足部分高需求场景。 2. **Apache Commons FileUpload**: - **优点**:活跃度高,社区支持好;能够处理大型文件上传;易于集成到Struts等框架中。 - **缺点**:相对于Smartupload来说,配置稍微复杂一些。 3. **其他国内开发者的组件**(文中未具体提及): - **特点**:可能具有一定的本地化优势,但知名度和社区支持不如前两者。 #### 三、使用Apache Commons FileUpload实现文件上传 本案例主要介绍了如何利用Apache Commons FileUpload组件实现文件上传功能。以下是具体的步骤和代码示例: 1. **配置文件上传页面**:`upload.jsp`文件负责展示文件上传表单,允许用户选择需要上传的文件并提交。 ```jsp <%@ page language="java" contentType="text/html;charset=GBK" %> <%@ page import="java.util.*" %> <%@ page import="org.apache.commons.fileupload.*" %> <%@ include file="/basic/include/headerjsf1.jsp" %> <% pageContext.setAttribute("jsp.tags.reuse", new Boolean(false)); %> <A:navigation/> <hr> <center><b><font size="+1"><bean:message key="upload.name"/></font></b></center> <html> <head> <title>????</title> </head> <body> <form action="/budget3/FileUploadAction.do" name="one" enctype="multipart/form-data" method="post"> <p align="center">文件上传 <input type="file" name="fileupload" value="upload"/> <input type="submit" value="上传"> <input type="reset" value="重置"> </p> </form> </body> </html> ``` 2. **处理文件上传请求**:`FileUploadAction.java`文件定义了一个`execute`方法,用于处理文件上传逻辑。 ```java public class FileUploadAction extends BaseAction { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ActionForward forward = null; try { System.out.println("start"); DiskFileUpload upload = new DiskFileUpload(); List<FileItem> uploadlist = upload.parseRequest(request); Iterator<FileItem> iter = uploadlist.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); if (!item.isFormField()) { String filename = item.getName(); filename = FilenameUtils.getName(filename); if (!filename.equals("")) { System.out.println("start" + filename); String savepath = "/tmp"; // 保存路径 File savefile = new File(savepath + "/" + filename); item.write(savefile); System.out.println("end" + filename); } } } forward = mapping.findForward("success"); } catch (Exception e) { e.printStackTrace(); forward = mapping.findForward("error"); } return forward; } } ``` #### 四、代码解析 1. **使用`DiskFileUpload`进行文件解析**:`DiskFileUpload`是Apache Commons FileUpload中的一个类,用于解析HTTP请求中的文件数据。通过调用`parseRequest`方法可以将请求体中的文件数据解析为`FileItem`对象列表。 2. **遍历文件项**:通过迭代器遍历所有`FileItem`对象,检查每个项是否为文件类型(而非表单字段)。如果是文件,则获取文件名,并执行相应的保存操作。 3. **文件保存**:示例中简单地将文件保存到了临时目录中。实际应用中,可根据业务需求选择合适的保存位置和命名策略。 4. **异常处理**:通过`catch`块捕获可能出现的异常,并根据异常情况决定转向成功页面还是错误页面。 #### 五、总结 通过本文介绍的方法,我们可以有效地利用Apache Commons FileUpload组件实现在Java Web应用中的文件上传功能。相比于Smartupload等早期组件,Apache Commons FileUpload提供了更为强大的文件处理能力,并且拥有活跃的社区支持,适合于大多数现代Web应用的开发需求。此外,还可以根据实际业务场景进一步扩展和完善文件上传逻辑,例如增加文件大小限制、格式校验等功能。
- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- 西月风2015-02-16下载来学习学习,好像只有一个文件
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2024年全球AI网络安全产品洞察报告
- 角形连接级联H桥statcom,角形连接,statcom,级联H桥,SVG,角形连接变器,角形系统,三角形连接,级联H桥变器,不平衡电网,电网不平衡,不平衡电网,角形连接级联H桥statcom,负序抑
- Linux服务器连接工具
- 机械设计三头距离自动调整液晶背板点胶机sw20可编辑全套技术资料100%好用.zip
- 2024年移动监测未来展望报告
- 微信小程序-创建滑动颜色条
- 多维图卷积神经网络在图表示学习中的应用与创新
- Matlab四旋翼无人机ADRC姿态控制器仿真 复现 无人机姿态模型,力矩方程,角运动方程 包含三个姿态角的数学模型,以及三个adrc控制器
- nacos-server安装包
- 机械设计双列直插式电路测试机step全套技术资料100%好用.zip
- MATLAB编程与数据处理关键技术问答
- JDK17-0.7-linux-x64
- 前端开发技术:JavaScript核心概念详解与应用实践指南,思维导图知识点
- 机械设计手机组装检测线step全套技术资料100%好用.zip
- windows版 phpstudy
- 在 Spring Boot 项目中,你可以同时集成 Swagger UI 和 Knife4j,以支持两种接口文档的展示 Knife4j 是基于 Swagger 的增强工具,因此它们可以共存