<form th:action="@{/aaa}" method="post" enctype="multipart/form-data"><!--/* 이후 공통인 부분 */-->
<input type="file" name="bbb">
<input type="submit" value="클릭">
</form>
// 파일이 저장되는 os 상의 경로는 application.yml 에 기술
@PostMapping("/aaa")
public String methodA(MultipartFile bbb) throws Exception{ // org.springframework.web.multipart.*
log.info(bbb.getOriginalFilename()); // 경로명 없이 파일 이름과 파일 확장자
log.info(bbb.getSize()); // long 바이트 사이즈. 1024 로 나누면 KB 사이즈
log.info(bbb.getContentType()); // image/jpeg, image/gif, image/png, ...
}
- file type 외의 컨트롤들은 그대로 String 파라미터로 담을 수 있음.
파라미터를 일일이 기술하는데 번거롭지만 간단.
public String methodA(String p1, String p2, MultipartFile bbb) throws Exception{
...
}
- file type 외에 컨트롤이 많을 때는, MultipartFile 과 자바빈즈 등으로 파라미터를 딸 수 있다
public String methodA(ClassA classA, MultipartFile bbb) throws Exception{
...
}
- ClassA 에 MultipartFile 과 그외 Entity 들을 정의하고,
methodA 에서 ClassA 인스턴스를 한 번에 받아서 사용 가능.
이게 일반적으로 많이 쓰임.
class ClassA{
...
@Transient // javax.persistence.*, DB 연동 X
private MultipartFile file; // org.springframework.web.multipart.*
}
public String methodA(ClassA classA) throws Exception{
...
MultipartFile bbb = classA.getFile()
log.info(bbb.getOriginalFilename()); // 경로명 없이 파일 이름과 파일 확장자
...
}
- file type 이 여러개이고 이름이 다른 경우(한 번에 파일을 여러개 업로드. 이 때 file type 의 name 은 서로 상이),
methodA 에 MultipartFile 파라미터를 여러개 설정(이 때도 명칭으로 매칭).
<input type="file" name="file1">
<input type="file" name="file2">
public String methodA(MultipartFile file1, MultipartFile file2) throws Exception{
...
}
또는.. ClassA 에 담아서..
class ClassA{
...
@Transient // javax.persistence.*, DB 연동 X
MultipartFile file1;
@Transient // javax.persistence.*, DB 연동 X
MultipartFile file2;
}
public String methodA(ClassA classA) throws Exception{
...
MultipartFile file1 = classA.getFile1()
MultipartFile file2 = classA.getFile2()
...
}
- file type 이 여러개이고 이름은 배열인 경우
methodA 에서 List<MultipartFile> files 와 같이 컬렉션에 담아서 사용
<input type="file" name="files[0]">
<input type="file" name="files[1]"><!--/* 배열 숫자 관리하기 은근 까다로움 */-->
public String methodA(List<MultipartFile> files) throws Exception{
...
for(MultipartFile file : files){
...
}
}
또는..
class ClassA{
...
List<MultipartFile> files;
}
public String methodA(ClassA classA) throws Exception{
...
List<MultipartFile> files = classA.getFiles();
for(MultipartFile file : files){
...
}
}
- file type 이 여러개이고 이름이 같은 경우.
바로 위에 설명된 배열 형태로 세팅하는 것과 다를 것이 없음.
<input type="file" name="files">
<input type="file" name="files"><!-- 동일한 name 으로 반복 사용, 이거 여러번 사용하기도 의외로 번거로움 -->
public String methodA(List<MultipartFile> files) throws Exception{
...
for(MultipartFile file : files){
...
}
}
또는..
class ClassA{
...
List<MultipartFile> files;
}
public String methodA(ClassA classA) throws Exception{
...
List<MultipartFile> files = classA.getFiles();
}
- file type multiple 옵션
<input type="file" name="files" multiple>
public String methodA(MultipartFile[] files) throws Exception{
...
for(MultipartFile file : files){
...
}
}
'Server Oriented > Spring' 카테고리의 다른 글
스프링 Transaction 트랜잭션 (0) | 2023.02.10 |
---|---|
스프링 파일 업로드 MultipartFile #2/2 (0) | 2023.02.03 |
JUnit5 JPA DB 테이블 1개 목록/상세/등록/수정/삭제 (0) | 2022.12.05 |
스프링 JPA, 평범한 게시판 구현 DB 테이블 1개 (2) | 2022.12.03 |
스프링, 세션과 쿠키 (0) | 2022.11.02 |