ホームページ  >  記事  >  Java  >  SpringBoot でのアップロード ファイル サイズの制限の問題を解決する方法

SpringBoot でのアップロード ファイル サイズの制限の問題を解決する方法

WBOY
WBOY転載
2023-05-16 14:22:126225ブラウズ

1. コンソール例外

org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:121)
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:114)

上記の例外からわかるように、アップロードされたファイルが Spring のデフォルト設定の最大値 1048576 バイトを超えていることが原因です。通常、MultipartFile インターフェイス クラスを使用して、フロントエンドによってアップロードされたファイルを受信するとき、MultipartFile ファイルのデフォルトの制限も 1048576 バイト、つまり 1M であることがわかります。

しかし、多くの場合、携帯電話で直接撮影した証明写真やドキュメントは基本的に 200 万を超えます。明らかにこれでは日々のニーズを満たすことができないため、デフォルトの構成パラメーターのサイズを変更する必要があります。

2. ファイルをアップロードするためのデフォルトのパラメーター

SpringBoot のバージョンが異なると、対応する設定パラメーターも異なります:

Spring Boot 1.3.x 以前

  • multipart.maxFileSize

  • multipart.maxRequestSize

Spring Boot 1.4.x および 1.5 .x

  • spring.http.multipart.maxFileSize

  • spring.http.multipart.maxRequestSize

Spring Boot 2.xxx

  • spring.servlet.multipart.maxFileSize

  • spring.servlet.multipart .maxRequestSize

3. 解決策

3.1. 方法 1 (設定ファイル .yml または .properties でパラメータを直接変更する)

例: I

SpringBoot 2.1.3 のバージョンが使用され、パラメータ サイズが設定ファイルに直接設定されます:

#做限制的参数配置
spring:
  servlet:
    multipart:
      enabled: true #默认支持文件上传
      max-file-size: 20MB # 最大支持文件大小
      max-request-size: 30MB # 最大支持请求大小

#不做限制的参数配置
spring:
  servlet:
    multipart:
      enabled: true #默认支持文件上传
      max-file-size: -1 #不做限制
      max-request-size: -1 #不做限制

設定後、プロジェクトを再起動すると、ファイルが正常にアップロードされます。 。

3.2. 方法 2 (カスタム構成設定クラス)

リモート設定ファイル センターでパラメータを設定します。設定プロジェクトの設定ファイルにある場合は、方法と同じです。 1. 個別の構成クラスを作成する必要はなくなり、パラメータはリモート構成センターで構成されるため、プロジェクトを再起動せずに一時的なニーズに応じてパラメータを動的に変更できます。

一般的なリモート構成ファイル センター サービスには、Nacos、Apollo (Apollo)、SpringCloud などが含まれます。私は Nacos 構成センター サービスを使用します:

SpringBoot でのアップロード ファイル サイズの制限の問題を解決する方法

Custom

MultipartFileConfig構成クラス:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;

/**
 * @author: 一宿君
 * @date: 2022-03-23 19:18:51
 * @description: 
 */
@Configuration
public class MultipartFileConfig {

    @Value("${config.multifile.maxFileSize}")
    private Long maxFileSize;
    @Value("${config.multifile.maxRequestSize}")
    private Long maxRequestSize;

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        /**
         * 单个数据大小,
         * DataSize.ofMegabytes(maxFileSize)默认是配置字节,将字节转化为MB
         */
        factory.setMaxFileSize(DataSize.ofMegabytes(maxFileSize));
        // 总上传数据大小
        factory.setMaxRequestSize(DataSize.ofMegabytes(maxRequestSize));
        return factory.createMultipartConfig();
    }
}

したがって、アップロードされるファイルのサイズをいつでも制御できます。

以上がSpringBoot でのアップロード ファイル サイズの制限の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。