親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

Tomcat+Nginx+Spring Bootで画像アップロードサイズを変更する方法


画像アップロード時には最大ファイルサイズが存在する

ファイルアップでは、サーバにファイルを保存するわけですが、ファイルサイズに上限はあります。
アプリによっては容量の大きなファイルをアップロードする場面もありますので、その上限が小さいと不都合が生じますよね。
そんな時はサーバの設定を変更することで簡単に解決できます。

Tomcat + Nginx + Spring Bootの場合のエラー

今回はこの構成例での解決法を記しますが、この構成例でファイルサイズが大きい場合、Tomcatのログで以下のようなエラーログが書き出されます。

org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (33358673) exceeds the configured maximum (20971520)]

簡単に言えば、20971520バイト(約21MB)がアップロードの上限にも関わらず、33358673バイト(約33MB)のファイルがアップロードされているためにエラーが発生しています。


各種設定変更

今回は例として、200MBのファイルをアップロードできるように設定していきたいと思います。

Spring Bootの設定

Spring Bootの場合は@Configurationアノテーションを付与したクラスに対して、以下のようなBeanの設定を加えてください。

@Configuration
public class MultiPartConfig {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("200MB"); // 1ファイルあたりの最大値
        factory.setMaxRequestSize("200MB"); // 1リクエストあたりの最大値
        return factory.createMultipartConfig();
    }
}

※setMaxFileSizeだけを引き上げてもリクエストあたりの最大値を引き上げなければ意味がないため、setMaxRequestSizeも変更してください。

Tomcatの設定

Tomcatの場合はserver.xmlファイルを変更する必要があります。
使用するConnectorで(SSL対応している場合はport="8443"、していない場合はport="8080")、maxPostSizeを指定してください。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
     maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS" maxPostSize="200000000"/>

変更後はTomcatの再起動を忘れずに!

Nginxの設定

最後にNginxですが、ここでは以下のようにclient_max_body_sizeというものを設定します。
SSL対応の有無によって、設定箇所は変わるので注意してください。
対応していればlistenが443、対応していなければlistenが80の場所です。

server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  test.net;
    root         /usr/share/nginx/html;
    client_max_body_size 200M;
    ・
    ・
    ・

変更後はNginxの再起動を忘れずに行ってください。
ちなみに今回はTomcatと連携した場合の対応を行っていますが、Nginx単独で動かす場合もこの変更は有効です。

まとめ

変更箇所が3箇所もあるのでちょっと手間ですよね。
そんなに変更が頻繁に発生するものでもないですが、変更時は漏れがないように注意してください。


ブラウン アルコール洗浄液 (2個入) メンズシェーバー用 CCR2 CR【正規品】

ブラウン アルコール洗浄液 (2個入) メンズシェーバー用 CCR2 CR【正規品】

NEC LEDシーリングライト LIFELED'S 調光タイプ ~8畳 HLDZB0869

NEC LEDシーリングライト LIFELED'S 調光タイプ ~8畳 HLDZB0869

オムロン 体重・体組成計 カラダスキャン ホワイト HBF-214-W

オムロン 体重・体組成計 カラダスキャン ホワイト HBF-214-W

パナソニック カナル型イヤホン イエロー RP-HJE150-Y

パナソニック カナル型イヤホン イエロー RP-HJE150-Y