【问题标题】:Spring WebFlux: set max file(s) size for uploading filesSpring WebFlux:设置上传文件的最大文件大小
【发布时间】:2019-12-16 21:01:58
【问题描述】:

我正在使用 Flux of FileParts 上传文件@RequestPart(FILES) Flux<FilePart> files

并试图限制文件的最大大小。看起来旧方法不起作用:

spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=1MB

而且我没有任何方法可以在FilePart 接口中获取文件大小。那么有什么方法可以限制 webflux 中上传文件的最大大小,而不复制它?我知道有像Content-Length 这样的标题,但它看起来并不安全。

【问题讨论】:

    标签: java spring file-upload upload spring-webflux


    【解决方案1】:

    Web on Reactive Stack documentation 声明如下:

    对于写入磁盘的文件部分,有一个额外的 maxDiskUsagePerPart 属性来限制每个部分的磁盘空间量。还有一个 maxParts 属性来限制多部分请求中的部分总数。要在 WebFlux 中配置所有 3 个,您需要向 ServerCodecConfigurer 提供一个预配置的 MultipartHttpMessageReader 实例。

    我可以通过这个配置类来应用它:

    @Configuration
    @EnableWebFlux
    public class WebConfig implements WebFluxConfigurer {
    
        @Override
        public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
            SynchronossPartHttpMessageReader partReader = new SynchronossPartHttpMessageReader();
            partReader.setMaxParts(1);
            partReader.setMaxDiskUsagePerPart(10L * 1024L);
            partReader.setEnableLoggingRequestDetails(true);
    
            MultipartHttpMessageReader multipartReader = new MultipartHttpMessageReader(partReader);
            multipartReader.setEnableLoggingRequestDetails(true);
    
            configurer.defaultCodecs().multipartReader(multipartReader);
        }
    
    }
    

    【讨论】:

    • 请注意,不幸的是,setMaxParts() 限制也适用于表单字段,而不仅仅是文件。
    • 另请注意,显示的配置使用 Synchronoss 部分阅读器而不是 DefaultPartHttpMessageReader:docs.spring.io/spring-framework/docs/current/javadoc-api/org/…
    • 如何设置单个端点的 MaxParts。假设我有一个 API 最多只能上传 3 个文件,另一个 API 需要 2 个 requestParts 作为字符串和最多 5 个文件上传?如果您执行 setMaxParts(3),则第二个 API 不允许上传超过 1 个文件。任何想法如何应用每个端点的限制而不是一般规则?
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2016-09-29
    • 2019-12-05
    • 2020-01-17
    • 2014-04-04
    • 2018-06-07
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多