当前位置: 首页 > news >正文

`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 原生上传方案对比

http://www.cnnetsun.cn/news/3847726.html

相关文章:

  • Prodigy Game Framework:Unity游戏开发框架核心模块解析与实战指南
  • Unity专业雨滴与水效果插件RaindropFX Pro Standard深度解析与应用指南
  • 从追踪到拦截:比例导引等经典导引律原理与工程实现详解
  • 别只把 CTF 当比赛!网络安全的黄金赛道,打通你的职业发展捷径
  • 别被影视剧骗了!解密真实黑客,打破大众对网安的刻板印象
  • SCSI MODE SENSE命令详解:6字节与10字节格式差异与应用场景
  • 免费开源AMD Ryzen调试工具:SMUDebugTool五分钟上手指南,轻松掌控处理器性能
  • 3分钟摆脱重复劳动:这款鼠标键盘录制神器让你效率飙升300%
  • 基于Pospac MMS的GNSS验潮数据处理全流程与精度分析
  • 拼多多笔试真题-平衡队伍(C++/Py/Java /Js/Go)
  • ComfyUI自定义节点开发:本地部署MiniMax H3模型实现智能提示词增强
  • 笔记本显卡驱动缺失症状与2026年修复全指南
  • Desktop Postflop:从直觉玩家到理论高手的免费GTO求解器
  • 如何用3分钟找出占用你Windows快捷键的“元凶“:Hotkey Detective深度解析
  • 从零开始学习 Zustand:React 状态管理利器详解与实战
  • 终极指南:3步免费升级老旧Mac到最新macOS
  • 拯救者笔记本性能调校指南:Lenovo Legion Toolkit完整教程
  • STM32F103C8T6与OLED实现嵌入式实时曲线绘制全解析
  • 基于Hadoop+Spark+Hive的地震预测大数据系统设计与实现
  • SMUDebugTool终极指南:7个简单技巧解决AMD Ryzen系统调试难题
  • 三星 HDR10 Plus Advanced 规格 2 本月全球上线,与杜比视界 2 谁能更胜一筹?
  • 从零到一:KLayout开源版图设计工具完整指南
  • 利用AI语音转写与精听训练,高效提升英语新闻听力
  • 闲鱼防关联系统:多线程不抢焦,告别网页卡死报错
  • ML.NET 踩坑实录:从 Demo 到生产的 8 类工程化陷阱
  • 微信聊天记录永久保存指南:让你的数字记忆不再消失
  • LRCGET:为什么这款工具能让你的离线音乐库歌词管理效率提升5倍?
  • Windows 11亮度滑块消失?从驱动到注册表的完整修复指南
  • SQL Server连接MySQL实战:ODBC驱动配置与跨库查询更新指南
  • 抖音批量下载器:从手动操作到自动化采集的技术革命