首页 > 解决方案 > 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.cloudSpring 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 原生的东西工作。我将其保留为更新,直到有人可以验证这是“正确”的解决方案。

标签: spring-bootspring-webflux

解决方案


推荐阅读