I trying to figure out how to set the max file size that can be uploaded when using Mono<FilePart>. I've tried the following:
properties config
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);
}
}
Using the WebConfiguration causing an exception to be thrown on upload:
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]
At this point I'm a bit at a loss. Any help would be most appreciated!
spring boot v2.4.4
UPDATE:
So I found the issue but I don't like it and I would like to wait to see if there is a better solution.
The issue is SynchronossPartHttpMessageReader has a dependency on org.synchronoss.cloud which is does not come with spring boot (or at least v2.4.4 through v2.5.x). Screen shot below
Here's the maven link and dependency:
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>
NOTE: any other version of this above dependency does not work, must use v1.1.0
After adding this using WebFluxConfigurer works. That's the exception was leading to. Again I don't like having to add an extra dependency in order for something native to Spring to work. I leave this as an update until someone can verify that this is the "correct" solve.
