惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
S
Schneier on Security
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
美团技术团队
Last Week in AI
Last Week in AI
罗磊的独立博客
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
大猫的无限游戏
大猫的无限游戏
V
V2EX
博客园_首页
博客园 - 司徒正美
IT之家
IT之家
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
雷峰网
雷峰网
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
J
Java Code Geeks
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
P
Privacy International News Feed
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
AWS News Blog
AWS News Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
Jina AI
Jina AI
V
Vulnerabilities – Threatpost
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LINUX DO - 最新话题
N
News and Events Feed by Topic
H
Hacker News: Front Page
腾讯CDC
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
WordPress大学
WordPress大学
爱范儿
爱范儿
T
Tor Project blog
博客园 - 【当耐特】
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
Latest news
Latest news
博客园 - 叶小钗
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队

博客园 - 锐洋智能

windows 下 降级迁移 Redis 8.8.0(源) → Redis 8.6.3(目标) Eclipse IDE for Enterprise Find/Replace 窗口可以"停驻" 安装 SDelete 方式 SDelete 的核心作用,不是 “删文件”,而是 “把你已经删掉的文件,彻底从磁盘上抹干净”,同时帮你把虚拟机里的 “空闲空间” 变成连续的、可被回收的状态。 windows 10 启动就运行了一个批处理文件 在什么地方修改?启动项中? 让 Spring Framework7.0.7 支持 velocity Java 9+ 开启了模块化安全限制,不允许 Ignite 直接访问底层内存地址,导致 Ignite 启动失败 Spring 5.x + 老项目的 JWT 拦截器 + 自动续期 接口鉴权:Session/Cookie 与 JWT 的核心区别 下是针对 RedisSessionManager 的 Tomcat context.xml 配置示例,覆盖基础单机 Redis、带密码 / 指定库、Redis 哨兵集群、自定义序列化 / 持久化策略 等常见场景 Redis-8.6.3-Windows-x64-cygwin 与 Redis-8.6.3-Windows-x64-msys2 有什么不一样? commons-fileupload2 M4 升级 M5 报错解决方案 阿里云的网络安全策略 ip 地址详细说明 Paralithic、 QLExpress、AviatorScript、exp4j 性能对比一下 java 序列化影响(重要!) paralithic 与 Aviator 表达式那一个更快 券商接受委托的完整时间线 jQuery 4.0 移除了许多已废弃的方法和特性 xheditor插件无限递归错误解决方法 jedis-7.1.0.jar 升级至 jedis-7.2.0.jar 就提示:The type JedisPoolConfig is deprecated The type JedisPooled is deprecated Spring 从 5.x 到 6.x 和 7.x 区别 js 原生 剪切板 复制功能 安装 Microsoft Visual C++ 运行时 Java与Python进程通信优化方案 Autocomplete | jQuery UI 同一面页定义不同的 .ui-autocomplete Quartz的misfire处理策略设置不当导致Job在应用启动时立即执行。 mysql-connector-j-9.5.0.jar BUG 推荐几款好用的CSS在线压缩工具 CSS 变量 定义及引用 TLS virtual host [_default_], certificate type [RSA] configured from keystore [d:/reyo/jks/localhost.jks] using alias [tomcat] with trust store [null] okhttp5.x 需要在 请求级别 控制是否使用重试拦截器,而不是在客户端级别
Apache Commons FileUpload 1.x 与 2.x 的主要区别
锐洋智能 · 2025-11-10 · via 博客园 - 锐洋智能

Apache Commons FileUpload 1.x 与 2.x 的主要区别


核心区别详解

1. 依赖关系 (Dependencies)

这是升级时遇到的第一个障碍。

  • 1.x: 依赖于 commons-io:commons-io:1.4 或更高版本(但仍是 1.x 系列)。

  • 2.x: 必须 依赖于 commons-io:commons-io:2.8.0 或更高版本。如果你的项目中还有其他库依赖于 commons-io 1.x,可能会引起冲突。

2. API 设计 (API Design)

这是代码层面需要修改最多的地方。

1.x 典型用法 (基于 Factory):


2.x 典型用法 (推荐流式 API):


2.x 兼容 1.x 的用法 (如果你不想大改代码):



可以直接从 1.x 升级到 2.x 吗?

答案是:不可以直接升级,但可以迁移。 这是一个破坏性升级,需要手动修改代码和依赖配置。

升级/迁移步骤:

  1. 更新依赖

    • 移除 commons-fileupload:commons-fileupload:1.x 依赖。

    • 添加 org.apache.commons:commons-fileupload2-core:2.x 依赖。

    • 如果你的项目是 Web 项目,还需要添加 Servlet 支持模块:

      • 对于 Jakarta EE 9+ (Tomcat 10+, Jetty 11+): org.apache.commons:commons-fileupload2-jakarta:2.x

      • 对于 Java EE 8 及以前 (Tomcat 9-): 官方 2.x 未提供 javax.servlet 支持。这是一个关键决策点。你可能需要寻找第三方适配器或考虑升级你的 Servlet 容器。

    • 确保 commons-io 升级到 2.8.0 或更高版本。

  2. 修改代码中的 Import 语句

    • 将所有 org.apache.commons.fileupload.* 的 import 语句改为 org.apache.commons.fileupload2.*

    • 注意:ServletFileUpload 类在核心包中不再存在,它被移到了 -jakarta 模块中,并且 API 也发生了变化。

  3. 重构代码逻辑

    • 强烈推荐 使用新的流式 API (FileItemIterator),这是 2.x 版本性能和内存优势的核心。

    • 如果你希望最小化代码修改,可以暂时使用 DiskFileItemFactoryFileUpload.parseRequest(request) 的方式,但这无法充分利用 2.x 的优势。

总结

在决定升级之前,请务必检查你的 Servlet 容器版本,以确定应该使用哪个 Servlet 支持模块(Jakarta 还是继续使用 1.x)。如果无法满足 Jakarta EE 的要求,坚持使用 1.x 可能是一个更稳妥的选择。