news 2026/8/5 11:24:36

`commons-fileupload` 是 Apache 提供的经典 Java Web 文件上传组件,**依赖 commons-io** 提供IO工具方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
`commons-fileupload` 是 Apache 提供的经典 Java Web 文件上传组件,**依赖 commons-io** 提供IO工具方法

commons-fileupload是 Apache 提供的经典 Java Web 文件上传组件,依赖 commons-io提供IO工具方法,二者配套使用,用于 Servlet 传统项目实现multipart/form-data方式文件上传。

适用场景:原生Servlet、SSM老项目(SpringMVC出现之前主流上传方案)
SpringMVC底层早期也是封装该组件:CommonsFileUploadSupport

二、Maven依赖

<!-- 文件上传核心包 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version></dependency><!-- IO工具依赖,fileupload必须依赖它 --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.16.1</version></dependency>

三、核心API

  1. ServletFileUpload:上传解析入口
  2. DiskFileItemFactory:文件工厂,配置临时文件、内存阈值
  3. FileItem:封装表单字段(普通参数/上传文件)
    • isFormField()判断是否普通文本参数
    • getName()获取上传文件名
    • getInputStream()获取文件流
    • write(File dest)保存文件

四、最简代码示例(原生Servlet)

// 1. 创建工厂DiskFileItemFactoryfactory=newDiskFileItemFactory();// 设置内存临界值:超过该大小写入临时磁盘factory.setSizeThreshold(1024*1024);// 指定临时目录factory.setRepository(newFile("D:/temp"));// 2. 创建上传解析器ServletFileUploadupload=newServletFileUpload(factory);// 限制单个文件最大、总上传大小upload.setFileSizeMax(10*1024*1024);upload.setSizeMax(50*1024*1024);try{// 解析请求,得到所有表单项List<FileItem>itemList=upload.parseRequest(request);for(FileItemitem:itemList){if(!item.isFormField()){// 文件StringfileName=item.getName();item.write(newFile("D:/upload/"+fileName));}else{// 普通表单参数Stringname=item.getFieldName();Stringvalue=item.getString("UTF-8");}}}catch(Exceptione){e.printStackTrace();}

五、重要注意事项

  1. 请求头要求
    前端表单必须:enctype="multipart/form-data",否则组件无法解析。
<formmethod="post"enctype="multipart/form-data"><inputtype="file"name="file"></form>
  1. 编码问题
    解析普通参数时建议指定编码item.getString("UTF-8"),防止中文乱码。

  2. 和SpringMVC关系
    SpringMVC 提供CommonsMultipartResolver,内部就是封装这套API;
    SpringBoot 2.x 默认使用StandardServletMultipartResolver(Servlet3.0内置上传,不需要这两个包),新项目不推荐引入 commons-fileupload。

  3. 优缺点
    ✅ 兼容老旧Servlet容器、灵活可控
    ❌ 需要手动处理临时文件清理;Servlet3.0之后有原生方案可替代;不再是首选方案

六、版本提醒

  • commons-fileupload 1.4+ 最低要求Java 8
  • 不要混用高低版本 commons-io,容易出现NoSuchMethodError

如果你需要,我可以补充:

  1. SpringMVC整合 CommonsFileUpload 配置
  2. 上传文件名去重、类型校验、异常捕获完整工具类
  3. 和 Servlet3.0 原生上传方案对比

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 11:23:55

Prodigy Game Framework:Unity游戏开发框架核心模块解析与实战指南

1. 项目概述&#xff1a;为什么我们需要一个现成的游戏框架&#xff1f;做独立游戏或者在公司里快速验证玩法原型&#xff0c;最头疼的事情是什么&#xff1f;我自己的经验是&#xff0c;每次开一个新项目&#xff0c;都得从零开始搭架子。玩家数据怎么存&#xff1f;场景怎么管…

作者头像 李华
网站建设 2026/8/5 11:23:08

Unity专业雨滴与水效果插件RaindropFX Pro Standard深度解析与应用指南

1. 项目概述&#xff1a;为什么我们需要一个专业的雨滴与水效果插件&#xff1f;在Unity项目里&#xff0c;尤其是那些追求沉浸感的开放世界、生存冒险或者叙事驱动的游戏里&#xff0c;天气系统从来都不是一个“锦上添花”的装饰品&#xff0c;而是构建世界氛围、驱动玩家情绪…

作者头像 李华
网站建设 2026/8/5 11:22:54

从追踪到拦截:比例导引等经典导引律原理与工程实现详解

1. 项目概述&#xff1a;从“追”到“截”的艺术 导引律&#xff0c;听起来是个挺学术的词&#xff0c;但它的核心思想其实特别直观&#xff1a; 让一个物体&#xff08;我们叫它“追击者”&#xff09;能够智能地、高效地去拦截另一个运动中的物体&#xff08;“目标”&#…

作者头像 李华
网站建设 2026/8/5 11:22:40

别只把 CTF 当比赛!网络安全的黄金赛道,打通你的职业发展捷径

别只把 CTF 当比赛&#xff01;网络安全的黄金赛道&#xff0c;打通你的职业发展捷径 CTF是网络安全领域的技术竞技比赛&#xff0c;包含解题、攻防和混合三种模式&#xff0c;以及Web渗透、逆向工程、二进制攻防、密码破译和综合杂项五大题型。作为职业发展的重要跳板&#x…

作者头像 李华
网站建设 2026/8/5 11:22:38

别被影视剧骗了!解密真实黑客,打破大众对网安的刻板印象

前言 什么叫黑客&#xff1f; 随着计算机技术的发展和普及&#xff0c;计算机网络已经是我们生活中必不可少的一部分。在网络里面有一群不法分子&#xff0c;他们借用网络行犯罪之事&#xff0c;这些人技术高超&#xff0c;能力强大&#xff0c;计算能力极强我们把他称为“黑…

作者头像 李华
网站建设 2026/8/5 11:21:28

SCSI MODE SENSE命令详解:6字节与10字节格式差异与应用场景

1. 项目概述&#xff1a;为什么需要深入理解MODE SENSE命令&#xff1f; 在存储、服务器运维或者嵌入式开发领域&#xff0c;如果你接触过SCSI、SAS或者SATA设备&#xff0c;那么“MODE SENSE”这个词组你大概率不会陌生。它不像 ls 或 cd 那样直观&#xff0c;也不像 fdi…

作者头像 李华