LoginSignup
2
4

More than 3 years have passed since last update.

Spring Bootでファイルアップロードした際ファイルサイズの最大値を超えたときにエラー処理を行う

Posted at

Spring Bootでファイルをアップロードする際にファイルサイズの最大値を設定することができる。
設定するのはapplication.propertesの以下のパラメータ

spring.servlet.multipart.enabled=true
# ファイル1つの最大サイズ
spring.servlet.multipart.max-file-size=10MB
# 複数ファイル全体の最大サイズ
spring.servlet.multipart.max-request-size=50MB

ここで設定した以上のサイズのファイルをアップロードしようとするとエラーが表示されるが、このエラー処理をカスタマイズしたいときの例を以下に記述する。

1.HandlerExceptionResolverの子クラス作成
プロジェクトの任意の箇所に以下のクラスを作成する。これによりファイルサイズ異常の例外を取得することができる。

@Component
public class ExceptionResolver implements HandlerExceptionResolver {
  @Override
  public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) {
    ModelAndView modelAndView = new ModelAndView();
    if (e instanceof MultipartException && e.getCause() instanceof IllegalStateException && e.getCause().getCause() instanceof FileSizeLimitExceededException) {
      //表示したいメッセージなど
      modelAndView.addObject("message", "ファイルサイズ超過");
    }
    //遷移したい画面を指定
    modelAndView.setViewName("error");
    return modelAndView;
  }
}

2.内蔵TomcatのMaxSwallowSizeの設定
1.だけではうまく動作しないため内蔵TomcatのMaxSwallowSizeに-1を設定する。
以下のメソッドはmainメソッドのあるXXXXApplication.java内に記述する。

 @Bean
  public TomcatServletWebServerFactory containerFactory() {
    return new TomcatServletWebServerFactory() {
      protected void customizeConnector(Connector connector) {
        super.customizeConnector(connector);
        if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {

          ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
        }
      }
    };
  }
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4