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

推荐订阅源

T
Troy Hunt's Blog
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
F
Full Disclosure
Recorded Future
Recorded Future
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
博客园_首页
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hacker News: Front Page
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
博客园 - 司徒正美
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
Cloudbric
Cloudbric
PCI Perspectives
PCI Perspectives
有赞技术团队
有赞技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
量子位
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tailwind CSS Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
N
News and Events Feed by Topic
罗磊的独立博客
T
Threat Research - Cisco Blogs
Schneier on Security
Schneier on Security
T
Tor Project blog
IT之家
IT之家
M
MIT News - Artificial intelligence
S
Security @ Cisco Blogs
O
OpenAI News
AI
AI
S
Securelist
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
月光博客
月光博客
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题

博客园 - 锐洋智能

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 可能是一个更稳妥的选择。