かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Spring Bootでファイルをアップロードする

Spring BootでファイルアップロードをするにはMultipartFileインターフェースを受け取るようにするといいみたいです。

こんなクラスを定義して

package okazuki.fileupload.simple.controllers;

import org.springframework.web.multipart.MultipartFile;

public class FileUploadForm {
    private MultipartFile fileData;

    public MultipartFile getFileData() {
        return fileData;
    }

    public void setFileData(MultipartFile fileData) {
        this.fileData = fileData;
    }

}

こんなHTMLでもって

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
</head>
<body>
    <form method="post" enctype="multipart/form-data" th:action="@{/upload}">
        <input name="fileData" type="file" />
        <input type="submit" />
    </form>
</body>
</html>

こんなコントローラーで受けれます。

package okazuki.fileupload.simple.controllers;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
    private static final Logger log = Logger.getLogger(HomeController.class); 
    
    @RequestMapping
    public String index() {
        return "index";
    }
    
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public String upload(FileUploadForm fileUploadForm) {
        log.info(fileUploadForm.getFileData().getName() + ", " + fileUploadForm.getFileData().getSize());
        return "index";
    }
}

MultipartFileインターフェースは、getBytesメソッドやgetInputStreamメソッドなどももってるので、お好みの方法でファイルのデータを扱うことができます。

リクエストのサイズとか

でかいファイルをアップできるようにするにはapplication.propertiesで以下の2つのパラメータを調整する必要があるみたいです。

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