spring-boot - Spring Boot Webflux:为 FilePart 设置最大文件上传限制
问题描述
我试图弄清楚如何设置使用时可以上传的最大文件大小Mono<FilePart>
。我尝试了以下方法:
属性配置
spring.servlet.multipart.max-file-size: 30KB // does not work
spring.codec.max-in-memory-size: 30KB // does not work
WebFluxWebConfigurer
@Configuration
@EnableWebFlux
public class WebConfiguration implements WebFluxConfigurer {
@Override
public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
// WebFluxConfigurer.super.configureHttpMessageCodecs(configurer);
SynchronossPartHttpMessageReader reader = new SynchronossPartHttpMessageReader();
reader.setMaxParts(1);
reader.setMaxDiskUsagePerPart(10L * 1024L);
reader.setEnableLoggingRequestDetails(true);
MultipartHttpMessageReader multipartReader = new MultipartHttpMessageReader(reader);
multipartReader.setEnableLoggingRequestDetails(true);
configurer.defaultCodecs().multipartReader(multipartReader);
}
}
使用WebConfiguration
导致在上传时引发异常:
2021-08-27 11:19:10.460 ERROR [universal-project-service,,] 14168 --- [ctor-http-nio-4] reactor.netty.http.server.HttpServer :
java.lang.NoClassDefFoundError: org/synchronoss/cloud/nio/multipart/PartBodyStreamStorageFactory
at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) ~[na:na]
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
at org.springframework.http.codec.multipart.SynchronossPartHttpMessageReader$SynchronossPartGenerator.<init>(SynchronossPartHttpMessageReader.java:195) ~[spring-web-5.3.5.jar:5.3.5]
在这一点上,我有点不知所措。非常感激任何的帮助!
弹簧靴 v2.4.4
更新:
所以我发现了这个问题,但我不喜欢它,我想等待看看是否有更好的解决方案。
问题是SynchronossPartHttpMessageReader
依赖于org.synchronoss.cloud
Spring Boot(或至少从 v2.4.4 到 v2.5.x)不附带的依赖项。下面的屏幕截图
这是maven链接和依赖项:
https://mvnrepository.com/artifact/org.synchronoss.cloud/nio-multipart-parser/1.1.0
<dependency>
<groupId>org.synchronoss.cloud</groupId>
<artifactId>nio-multipart-parser</artifactId>
<version>1.1.0</version>
</dependency>
注意:上述依赖项的任何其他版本都不起作用,必须使用 v1.1.0
添加此使用WebFluxConfigurer
作品后。这就是导致的异常。同样,我不喜欢必须添加额外的依赖项才能使 Spring 原生的东西工作。我将其保留为更新,直到有人可以验证这是“正确”的解决方案。
解决方案
推荐阅读
- prometheus - Prometheus 实例标签与容器
- javascript - 为什么模型表单没有在锚标签上打开?
- javascript - Calculate corners of rotated rectangle in container
- python - 烧瓶邮件api,没有正确获取请求变量
- azure-virtual-machine - What doesn't the disk size in the portal match what I see in my VM File Explorer?
- powershell - 从发布管道运行 linqpad 脚本的最佳方式是什么?
- javascript - 正确使用 setTimeout
- javascript - 如何使以 AB- 开头的单词可点击?
- bash - 如何在 docker 容器中执行 shell 脚本
- forms - 为什么 Bootstrap 4 Form 密码字段字体有意外的下划线?