SpringBoot ファイルをアップロードするサンプル

SpringBootファイルをアップロードするサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)

目次

サンプル ファイルをアップロードする
  コントローラ(FileController.java)
  フォーム(FileForm.java)
  画面(index.html)
  設定ファイル(application.properties)

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

ファイルをアップロードする流れは、以下のとおりです。

1.画面でファイルを選択しボタンを押すとアップロード処理が始まります。

2.フォームを介してコントローラが指定の場所にファイルを配置します。

http://localhost:8765/でアクセスします。

githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-fileupload

 

コントローラ(FileController.java)

package com.example.demo;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FileController {

    @GetMapping
    String index(Model model) {
        model.addAttribute("fileForm", new FileForm());
        return "/index";
    }

    @PostMapping("/upload")
    String upload(FileForm fileForm) {
    	
        MultipartFile mfile = fileForm.getMultipartFile();
        String fileName = mfile.getOriginalFilename();
        Path filePath = Paths.get("D:/test1/" + fileName);
        
        try {
        	Files.copy(mfile.getInputStream(), filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "redirect:/";
    }
}

16行目は、画面の初期表示です。
22行目は、ファイルアップロードするとFileFormに値がセットされます。
25行目のgetMultipartFileは、クライアントの元のファイル名を返します。
26行目は、ファイルの配置先を指定しています。
29行目は、ファイルをcopyメソッドで配置しています。

フォーム(FileForm.java)

package com.example.demo;
import org.springframework.web.multipart.MultipartFile;

public class FileForm {
    private MultipartFile mFile;

	public MultipartFile getMultipartFile() {
		return mFile;
	}
	public void setMultipartFile(MultipartFile multipartFile) {
		this.mFile = multipartFile;
	}
}

フォームでアップロードしたファイルを受け取ります。
以下は、MultipartFileのJavaDocです。メソッドがあります。
https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html

画面(index.html)

<!DOCTYPE html>
<html xmlns:th="https://thymeleaf.org">
<head>
	<meta charset="UTF-8">
	<title>upload</title>
</head>
<body>
<form method="post" th:action="@{/upload}" enctype="multipart/form-data" th:object="${fileForm}">
<p><input type="file" th:field="*{multipartFile}"></p>
<p><input type="submit" value="アップロード"></p>
</form>
</body>
</html>

enctypeにmultipart/form-dataを指定します。

設定ファイル(application.properties)

server.port = 8765
#spring.servlet.multipart.max-file-size=100KB
spring.servlet.multipart.max-file-size=1MB

multipart.max-file-sizeでアップロードするファイルの最大容量を指定できます。

関連の記事

SpringBoot フォームで入力チェック(バリデーション)

△上に戻る