UT000020: Connection terminated as request was larger than 10485760

问题

这个项目是ssh项目,然后服务器是wildfly
需求是要上传小于等于15MB的文件
但是当我上传14MB文件的时候,发现如下报错

javax.servlet.ServletException: org.apache.commons.fileupload.FileUploadException: UT000020: Connection terminated as request was larger than 10485760

这个就是大于10MB的文件不能上传

解决方案

首先,我肯定优先看看java代码看哪里有什么设置之类的,发现并没有什么设置
然后往另一方面想,是不是wildfly配置的关系
于是我在网上搜了一下,wildfly还真配置了默认文件上传大小限制
wildfly-13.0.0.Final\standalone\configuration\standalone.xml处修改

<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>

改成如下即可

<http-listener name="default" socket-binding="http" max-post-size="15728640" redirect-socket="https" enable-http2="true"/>

在这里插入图片描述
解决~

### 连接终止问题解决方案 当 Undertow 的请求大小超出默认限制(10 MB 或 10485760 字节)时,会触发 `io.undertow.server.RequestTooBigException` 异常并中断连接。此行为可以通过调整配置来解决。 #### 配置 Undertow 请求大小限制 在 Spring Boot 应用程序中,可以修改 Undertow 的最大实体大小设置以支持更大的文件上传。通过自定义 Undertow 嵌入式服务器的配置实现这一点: ```java import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class UndertowConfig { @Bean public UndertowServletWebServerFactory undertowEmbedded() { UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory(); // 设置最大实体大小为 50MB (单位字节) factory.addBuilderCustomizers(builder -> builder.setSocketOption(Options.MAX_ENTITY_SIZE, 52428800L)); return factory; } } ``` 上述代码片段设置了最大实体大小为 50 MB[^1]。如果应用程序需要更高的上限,则可以根据需求进一步增加该值。 #### 调整应用层逻辑处理大文件 除了调整服务器端的最大实体大小外,还需要确保前端和中间件不会因超时或其他原因阻止大文件传输。例如,在使用 OSS 存储服务时,应考虑分片上传策略以提高稳定性。 以下是基于阿里云 OSS SDK 实现的大文件分片上传示例: ```java import com.aliyun.oss.OSS; import com.aliyun.oss.model.CompleteMultipartUploadRequest; import com.aliyun.oss.model.InitiateMultipartUploadRequest; import com.aliyun.oss.model.PartETag; import com.aliyun.oss.model.UploadPartRequest; import java.util.ArrayList; import java.util.List; public class OssFileUploader { private final OSS ossClient; public OssFileUploader(OSS ossClient) { this.ossClient = ossClient; } public void uploadLargeFile(String bucketName, String objectKey, File file) throws Exception { long partSize = 5 * 1024 * 1024; // 每个分片大小设为 5MB InitiateMultipartUploadRequest initReq = new InitiateMultipartUploadRequest(bucketName, objectKey); String uploadId = ossClient.initiateMultipartUpload(initReq).getUploadId(); List<PartETag> partETags = new ArrayList<>(); long fileSize = file.length(); int partCount = (int) ((fileSize + partSize - 1) / partSize); for (int i = 0; i < partCount; i++) { long startPos = i * partSize; long curPartSize = Math.min(partSize, fileSize - startPos); UploadPartRequest uploadReq = new UploadPartRequest(); uploadReq.setBucketName(bucketName); uploadReq.setKey(objectKey); uploadReq.setUploadId(uploadId); uploadReq.setPartNumber(i + 1); // 分片编号从 1 开始计数 uploadReq.setInputStream(new FileInputStream(file)); uploadReq.setPartSize(curPartSize); PartETag partETag = ossClient.uploadPart(uploadReq); partETags.add(partETag); } CompleteMultipartUploadRequest completeReq = new CompleteMultipartUploadRequest(bucketName, objectKey, uploadId, partETags); ossClient.completeMultipartUpload(completeReq); } } ``` 这段代码实现了将大型文件分割成多个部分分别上传到 OSS,并最终完成整个文件的拼接操作。 #### 关于 WebSocket 和 TCP 断开的影响 需要注意的是,即使解决了 HTTP 文件上传中的大小限制问题,但如果底层 TCP 连接意外关闭,仍可能导致数据丢失或不完整的风险。因此建议监控网络状态以及合理设计重试机制来增强系统的健壮性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值