news 2026/6/9 23:12:19

Undertow不支持大文件上传,使用application.yml配置失效

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Undertow不支持大文件上传,使用application.yml配置失效

这是一个Spring Boot 配置类,用于自定义UndertowWeb 服务器的配置,主要目的是调整请求体(包括文件上传)的最大大小限制

一、类结构说明

1.@Configuration

  • 表明这是一个Spring 配置类,会在应用启动时被加载。
  • 用于定义和注册 Spring Bean。

2.UndertowConfig

  • 自定义 Undertow 服务器配置的配置类。
  • 通常用于替代默认的 Tomcat 配置(如果项目使用的是 Undertow 作为内嵌服务器)。

二、核心配置项

1.MAX_ENTITY_SIZE

  • 定义了一个常量:10L * 1024 * 1024,即10 MB
  • 这是Long 类型,因为 Undertow 的相关选项使用 Long 类型。
  • 该常量被用于两个地方:
    • 普通请求体的最大大小
    • 文件上传请求体的最大大小

三、核心 Bean:undertowCustomizer

1.返回值类型

WebServerFactoryCustomizer<UndertowServletWebServerFactory>
  • 这是一个工厂定制器,允许在 Spring Boot 启动时对 Undertow 服务器进行自定义配置。

2.定制逻辑

  • 使用 Lambda 表达式创建定制器。
  • 通过factory.addBuilderCustomizers添加一个UndertowBuilderCustomizer

四、两个关键配置项

builder中设置了两个 Undertow 选项:

1.UndertowOptions.MAX_ENTITY_SIZE

  • 作用:设置所有普通 HTTP 请求体的最大大小。
  • 默认值:通常是 2 MB。
  • 本次设置:调整为 10 MB。

2.UndertowOptions.MULTIPART_MAX_ENTITY_SIZE

  • 作用:专门用于设置文件上传请求体的最大大小。
  • 默认值:通常是 2 MB。
  • 本次设置:调整为 10 MB。

五、为什么需要这个配置?

1.默认限制较小

  • Spring Boot 默认的请求体限制通常是2 MB
  • 如果上传文件或处理大请求体时超过该限制,会抛出异常。

2.区分普通请求与文件上传

  • MAX_ENTITY_SIZE控制普通 POST/PUT 请求体大小。
  • MULTIPART_MAX_ENTITY_SIZE控制multipart/form-data请求(文件上传)的大小。

3.统一调整为 10 MB

  • 这里将两者统一设置为 10 MB,避免因请求体过大导致的错误。

六、使用场景

  • 当你使用Spring Boot + Undertow作为服务器时。
  • 需要上传大于 2 MB 的文件时。
  • 需要处理较大的 JSON 或 XML 请求体时。

七、注意事项

  1. 仅适用于 Undertow

    • 如果使用 Tomcat 或 Jetty,需要另一种配置方式。
  2. 可能会影响性能

    • 设置过大会增加内存占用,需根据实际需求调整。
  3. 应与前端配置一致

    • 如果前端也有文件上传大小限制,应保持一致。
  4. 可能还需要配置 Spring MVC 的上传限制

    • spring.servlet.multipart.max-file-sizemax-request-size,两者需配合使用。

八、示例扩展

如果还需要设置其他 Undertow 参数,可以在builder中继续添加:

builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE,MAX_ENTITY_SIZE).setServerOption(UndertowOptions.MULTIPART_MAX_ENTITY_SIZE,MAX_ENTITY_SIZE).setServerOption(UndertowOptions.MAX_PARAMETERS,1000)// 增加最大参数数量.setServerOption(UndertowOptions.MAX_HEADERS,200);// 增加最大请求头数量

这是一个典型的Spring Boot 嵌入式服务器定制配置,用于突破默认请求大小限制,特别适用于需要处理大文件上传或大数据请求的应用场景。

@Configuration public class UndertowConfig{// 配置你需要的最大请求大小,10MB=10*1024*1024 字节(Long类型,匹配UndertowOptions的Long常量) private static final long MAX_ENTITY_SIZE=10L *1024*1024;@Bean public WebServerFactoryCustomizer<UndertowServletWebServerFactory>undertowCustomizer(){return(UndertowServletWebServerFactory factory)->{factory.addBuilderCustomizers((builder)->{// 核心1:设置所有普通请求体最大大小(对应你看到的MAX_ENTITY_SIZE,默认2MB) builder.setServerOption(UndertowOptions.MAX_ENTITY_SIZE, MAX_ENTITY_SIZE)// 核心2:设置文件上传请求体最大大小(对应你看到的MULTIPART_MAX_ENTITY_SIZE,默认2MB) .setServerOption(UndertowOptions.MULTIPART_MAX_ENTITY_SIZE, MAX_ENTITY_SIZE);});};}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 12:32:02

Vue 教程 自定义指令 + 生命周期全解析

Vue 3 自定义指令 完整生命周期详解&#xff08;2025–2026 实用版&#xff09; Vue 3 的自定义指令和组件生命周期是中高级开发中非常高频的内容&#xff0c;尤其在以下场景中几乎必考/必用&#xff1a; 复杂表单&#xff08;自动聚焦、输入防抖、权限显隐&#xff09;拖拽…

作者头像 李华
网站建设 2026/5/26 0:59:40

【Linux命令大全】009.备份压缩之gzip命令(实操篇)

【Linux命令大全】009.备份压缩之gzip命令&#xff08;实操篇&#xff09; ✨ 本文为Linux系统备份压缩命令的全面汇总与深度优化&#xff0c;结合图标、结构化排版与实用技巧&#xff0c;专为高级用户和系统管理员打造。 (关注不迷路哈&#xff01;&#xff01;&#xff01;) …

作者头像 李华
网站建设 2026/5/21 22:45:48

【网络安全】六大知名Web安全漏洞靶场

前言 如果想搞懂一个漏洞&#xff0c;最好的方法是先编写出这个漏洞&#xff0c;然后利用它&#xff0c;最后修复它。漏洞靶场模拟真实环境&#xff0c;它为网络安全人员提供了一个安全可控的平台&#xff0c;用于发现、评估和测试应用程序、系统或网络设备的安全漏洞。WEB漏洞…

作者头像 李华
网站建设 2026/5/28 18:34:57

2025年 Java 面试八股文

2025–2026 年 Java 后端面试&#xff08;尤其是金九银十、春招秋招、社招&#xff09;的高频“八股文”已经高度内卷化。面试官越来越倾向于**“八股文 项目场景 真实问题解决”**的组合考察。 下面给你一份2025–2026 年仍然最主流、最常被问到的八股文分类汇总&#xff0…

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

键盘改键神器,小巧实用

今天给大家推荐两款键盘改键和屏蔽的工具&#xff0c;有需要的小伙伴可以下载收藏。 第一款&#xff1a;KeyboardShield KeyboardShield是一款轻量级的键盘屏蔽和键位映射工具&#xff0c;体积大小仅124K&#xff0c;非常小巧&#xff0c;而且还是绿色单文件版&#xff0c;功能…

作者头像 李华
网站建设 2026/6/8 17:40:20

基于springboot的零工市场服务系统设计开发实现

零工市场服务系统的背景 随着共享经济和灵活就业模式的兴起&#xff0c;零工经济在全球范围内快速发展。传统就业模式难以满足企业和个人的多样化需求&#xff0c;零工市场通过数字化平台连接供需双方&#xff0c;提供高效灵活的用工解决方案。零工市场服务系统应运而生&#…

作者头像 李华