LoginSignup
13
12

More than 5 years have passed since last update.

Spring Boot で大きいサイズのファイルをアップロードする

Last updated at Posted at 2016-05-24

Spring Bootで大きいサイズのファイルをアップロードします。
アップロードの仕方はググればなんとなく出てくるので、下記のソースは特に説明しません。
SweetAlertは何かリッチなダイアログですが、コードがブロッキングされない、モーダルにしても状況によっては裏が触れる等、多少注意が必要です。
SweetAlertで使用しているdialog要素や、multipart/form-dataHTML5の機能になりますので、HTML5対応のブラウザが前提です。
あ、あとjQueryにも依存してます。

upload.html

    <form id="upload_file" enctype="multipart/form-data">
        <div id="search-upload">
            <input id="file-select" type="file" name="file" />
            <span id="upload" class="button button01 btn" onclick="return false;">アップロード</span>
        </div>
    </form>

<script>

// 「アップロード」ボタン押下
$(document).on('click', '#upload', function() {

    // 確認メッセージ
    swal({
        title : "",
        text : "ファイルをアップロードしてよろしいですか?",
        type : "warning",
        allowOutsideClick : "true",
        showCancelButton : "true",
        cancelButtonText : "閉じる"
    }, function() { 
        formData = new FormData($('#upload_file').get()[0]);
        formData.append("param1", $("#param1").val());

        // アップロード要求
        $.ajax({
            url: "/upload",
            method: 'post',
            data: formData,
            processData: false,
            contentType: false,
            cache: false,
            timeout: 300000,

            // アップロード成功
            success: function (Result) {
                // 成功時の処理
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                // エラー時の処理
            }
        })
    });
});

</script>
UploadController.java

    // ファイルアップロード
    @RequestMapping(value="/upload", method=RequestMethod.POST, consumes = "multipart/form-data")
    public String upload(@RequestParam("file") MultipartFile file,
                         @RequestParam("param1") String param1) {

        return "SUCCESS";
    }

さて、問題はファイルサイズが大きくてファイルがアップロードできないことでした。
ググるとapplication.properties(もしくはapplication.yml)でサイズ制限を解除しろと散々出てくるし、公式でもそのやり方が出てくるのですが、設定しても一向にアップロード出来ません。

application.properties
multipart.max-file-size=100MB
multipart.max-request-size=100MB
application.yml
multipart:
    maxFileSize: 100MB
    maxRequestSize: 100MB

色々試した結果、以下のConfigurationクラスを作ることで解決しました。

MultiPartConfigure.java
import javax.servlet.MultipartConfigElement;
import org.springframework.boot.context.embedded.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MultiPartConfigure {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("100MB");
        factory.setMaxRequestSize("100MB");
        return factory.createMultipartConfig();
    }
}

結局プロパティファイルでなぜ駄目だったかはわからず。。

13
12
8

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
13
12