[Spring Boot] Spring Boot File Upload 예제 | 이미지 및 파일 업로드 구현 가이드
[Spring Boot] Spring Boot File Upload 예제 | 이미지 및 파일 업로드 구현 가이드
[Spring Boot] Spring Boot에서 Interceptor 사용하기 | 설정부터 실전 예제까지 [Spring Boot] Spring Boot에서 Interceptor 사용하기 | 설정부터 실전 예제까지[Spring Boot] Spring Boot 에러 처리: @ControllerAdvice로 쉽게 관
crushed-taro.tistory.com
1. MultiFile Upload
1. 파일 업로드 뷰 페이지 작성
업로드 폼을 보여줄 뷰 페이지를 작성한다.
<form action="multi-file" method="post" encType="multipart/form-data">
파일 : <input type="file" name="multiFiles" multiple><br>
파일 설명 : <input type="text" name="multiFileDescription"><br>
<input type="submit">
</form>
위 코드에서 input 태그의 multiple은 파일 여러 개를 한 번에 업로드 하기 위한 속성이다.
2. 파일 업로드를 처리할 컨트롤러 생성
업로드 파일이 같은 name 속성으로 여러 개 전달 되므로 MultipartFile클래스는 List타입으로 선언해야 한다.
@PostMapping("multi-file")
public String multiFileUpload(@RequestParam List<MultipartFile> multiFiles,
String multiFileDescription, Model model) {
System.out.println("multiFiles : " + multiFiles);
System.out.println("multiFileDescription : " + multiFileDescription);
/* 파일을 저장할 경로 설정 */
String root = "src/main/resources/static";
System.out.println("root : " + root);
String filePath = root + "/uploadFiles";
File dir = new File(filePath);
if(!dir.exists()) {
dir.mkdirs();
}
List<FileDTO> files = new ArrayList<>();
try {
for(MultipartFile file : multiFiles) {
/* 파일명 변경 처리 */
String originFileName = file.getOriginalFilename();
String ext = originFileName.substring(originFileName.lastIndexOf("."));
String savedName = UUID.randomUUID().toString().replace("-", "") + ext;
/* 파일에 관한 정보 추출 후 보관 */
files.add(new FileDTO(originFileName, savedName, filePath,
multiFileDescription));
/* 파일을 저장 */
file.transferTo(new File(filePath + "/" + savedName));
}
model.addAttribute("message", "파일 업로드 성공!");
} catch (Exception e) {
e.printStackTrace();
/* 실패 시 이전에 저장 된 파일 삭제 */
for(FileDTO file : files) {
new File(filePath + "/" + file.getSavedName()).delete();
}
model.addAttribute("message", "파일 업로드 실패!!");
}
return "result";
}
3. FileDTO
파일을 처리하는데 필요한 정보를 DTO 타입을 선언해서 다룰 수 있다. 추후 DB에 저장하는 등의 작업 시 활용 된다.
public class FileDTO {
private String originFileName;
private String savedName;
private String filePath;
private String fileDescription;
public FileDTO() {
}
public FileDTO(String originFileName, String savedName, String filePath,
String fileDescription) {
this.originFileName = originFileName;
this.savedName = savedName;
this.filePath = filePath;
this.fileDescription = fileDescription;
}
public String getOriginFileName() {
return originFileName;
}
public void setOriginFileName(String originFileName) {
this.originFileName = originFileName;
}
public String getSavedName() {
return savedName;
}
public void setSavedName(String savedName) {
this.savedName = savedName;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileDescription() {
return fileDescription;
}
public void setFileDescription(String fileDescription) {
this.fileDescription = fileDescription;
}
@Override
public String toString() {
return "FileDTO{" +
"originFileName='" + originFileName + '\'' +
", savedName='" + savedName + '\'' +
", filePath='" + filePath + '\'' +
", fileDescription='" + fileDescription + '\'' +
'}';
}
}
4. 반환 뷰 페이지
이전 테스트와 동일한 반환 뷰 페이지를 사용한다.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>result</title>
</head>
<body>
<h1 th:text="${ message }"></h1>
</body>
</html>
지정된 경로에 파일이 업로드 되는 것을 확인할 수 있다.
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring Boot 프로젝트에 Thymeleaf 템플릿 엔진 적용하기 (2) | 2025.09.14 |
---|---|
[Spring Boot] Spring Boot File Upload 예제 | 이미지 및 파일 업로드 구현 가이드 (0) | 2025.09.07 |
[Spring Boot] Spring Boot에서 Interceptor 사용하기 | 설정부터 실전 예제까지 (0) | 2025.09.02 |
[Spring Boot] Spring Boot 에러 처리: @ControllerAdvice로 쉽게 관리하기 (0) | 2025.08.31 |
[Spring Boot] Spring Boot 에러 처리: @ExceptionHandler로 쉽게 관리하기 (0) | 2025.08.30 |