かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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