Code ví dụ Spring Boot Upload file

Code ví dụ Spring Boot Upload file

(Xem lại: Ví dụ Spring MVC Upload file)

(Xem lại: Spring MVC Upload File kết hợp Progress Bar (JQuery, Bootstrap))

Các công nghệ sử dụng:

Tạo Spring Boot Project

spring starter project

Ví dụ spring boot upload file

upload file với spring boot

Cấu trúc Project

Code ví dụ Spring Boot Upload file

Thư viện sử dụng:

Ngoài các thự viện có sẵn khi tạo spring boot project, mình dùng thêm thư viện commons-fileupload để upload file.

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

Class Model

package stackjava.com.sbuploadfile.model;

import java.io.Serializable;

import org.springframework.web.multipart.MultipartFile;

public class MyFile implements Serializable {
  private static final long serialVersionUID = 1L;
  private MultipartFile multipartFile;
  private String description;

  public MultipartFile getMultipartFile() {
    return multipartFile;
  }

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

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

}

MultipartFile là đối tượng file được upload lên

Ở đây ngoài file còn có thể có một số thông tin được submit cùng, ví dụ  mình thêm thuộc tính description để submit cùng.

Controller

package stackjava.com.sbuploadfile.controller;

import java.io.File;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import stackjava.com.sbuploadfile.model.MyFile;

@Controller
public class BaseController {

  @RequestMapping("/")
  public String index(Model model) {
    model.addAttribute("myFile", new MyFile());
    return "index";
  }

  @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
  public String uploadFile(MyFile myFile, Model model) {
    model.addAttribute("message", "Upload success");
    model.addAttribute("description", myFile.getDescription());
    try {
      MultipartFile multipartFile = myFile.getMultipartFile();
      String fileName = multipartFile.getOriginalFilename();
      File file = new File(this.getFolderUpload(), fileName);
      multipartFile.transferTo(file);
    } catch (Exception e) {
      e.printStackTrace();
      model.addAttribute("message", "Upload failed");
    }
    return "result";
  }

  public File getFolderUpload() {
    File folderUpload = new File(System.getProperty("user.home") + "/Uploads");
    if (!folderUpload.exists()) {
      folderUpload.mkdirs();
    }
    return folderUpload;
  }
}

Hàm getFolderUpload() dùng để lấy/tạo folder chứa file upload ở folder của người dùng (một số ví dụ mình fix cứng là D:/files thành ra máy của một số bạn không có ổ D hoặc chạy Linux nên nó báo không thấy folder/file)

File sau khi được upload, file sẽ được lưu vào folder {user_folder}/Uploads.

Các file view

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>index</title>
</head>
<body>
  <h2>Demo Spring Boot Upload File</h2>
  <form method="post" th:action="@{/uploadFile}" enctype="multipart/form-data" th:object="${myFile}">
    File: <input type="file" th:field="*{multipartFile}" /> <br /> <br />
    Description: <input type="text" th:field="*{description}" /> <br /> <br />
    <input type="submit" value="Submit" />
  </form>
  
</body>
</html>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>index</title>
</head>
<body>
  <h3 th:text="${message}"></h3>
  <p>File Description:  <span th:text="${description}"></span></p>
</body>
</html></html>

Lưu ý:

Mặc định kích thước file lớn nhất có thể upload là 1MB. Để tùy chỉnh kích thước file có thể upload, các bạn cấu hình trong file application.properties

Ví dụ mình cho phép file có kích thước lớn nhất có thể upload là 30MB

spring.servlet.multipart.max-file-size=30MB
spring.servlet.multipart.max-request-size=30MB

Demo

Code ví dụ Spring Boot Upload file

Code ví dụ Spring Boot Upload file

Mình sử dụng hệ điều hành là windows, tài khoản windows là kai nên file upload sẽ lưu ở folder C:/Users/kai/Uploads

Code ví dụ Spring Boot Upload file

Code ví dụ Spring Boot Upload file stackjava.com

Okay, Done!

Download code ví dụ trên tại đây

 

References:

https://commons.apache.org/proper/commons-fileupload/

stackjava.com