| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- error
- TestCode
- 스프링부트
- JPA
- 프로그래머스
- 백준
- JWT
- queue
- SpringBoot
- 자료구조
- QueryDSL
- spring boot
- 컴퓨터 구조
- 백엔드공부
- 연관관계
- 서버
- 백엔드스쿨
- ORM
- LinkedList
- restTemplate
- spring
- actuator
- 제로베이스
- 백엔드
- SpringSecurity
- array
- Java
- 개발자
- 컴퓨터 공학
- 핵심가이드
Archives
- Today
- Total
be_better
[Springboot] MultipartFile 로 이미지 업로드 본문
목차
프로젝트 진행 중
유저의 프로필 사진을 받아 AWS s3에 저장하는 기능을 구현하기 전에
로컬 디렉토리에 이미지가 저장되는지 확인하기 위해 간단하게 테스트를 진행했다.
업로드 테스트
편의를 위해 Controller 만 구현하였다.
TestController
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("")
public String uploadImgFile(@RequestParam(value = "image") MultipartFile image) {
log.info("[uploadImgFileTest] file name : {}", image.getOriginalFilename());
try {
image.transferTo(
new File("/Users/parktj/Documents/IntelliJ/personal/Onbition/doc/img/"
+ image.getOriginalFilename())
);
} catch (IOException e) {
e.printStackTrace();
}
return image.getOriginalFilename();
}
}
Postman test
postman test

Postman 에서 테스트를 하려면 Body에 form-data 에서 Key값을 file 형식으로 지정하고 반드시 key name을 써줘야 한다.
postman 에러
file working directory 에러가 뜰 경우에는 다음과 같이 해결한다.


Setting - General - Working directory에서
파일을 찾을 directory를 선택하고 Read files outside working directory를 체크한다.
정상적으로 동작
에러 없이 정상적으로 동작했다면 이미지 파일이 해당 디렉토리에 저장된것을 확인할 수 있다.

시행착오
file pathname

file pathname을 주의하자!!
file pathname을 작업중인 디렉토리가 아닌 ~(루트) 디렉토리부터 써줘야 한다.
RequestParam vs RequestPart
@GetMapping("")
public String uploadImgFile(@RequestPart MultipartFile image) {
log.info("[uploadImgFileTest] file name : {}", image.getOriginalFilename());
try {
image.transferTo(
new File("/Users/parktj/Documents/IntelliJ/personal/Onbition/doc/img/"
+ image.getOriginalFilename())
);
} catch (IOException e) {
e.printStackTrace();
}
return image.getOriginalFilename();
}
RequestParam과 RequestPart는 혼용해서 많이 사용한다는데,,
RequestParam
RequestParam은 다른 RequestParam들과 같이 사용할 때 사용하고
example
@GetMapping("")
public String uploadImgFile(
@RequestParam("image") MultipartFile image,
@RequestParam("name") String name) {
... (생략)
}
RequestPart
RequestPart는 RequestBody와 같이 JSON 형식으로 값을 받는것과 같이 사용할 때 사용하면 된다고 이해한다.
example
@GetMapping("")
public String uploadImgFile(
@RequestPart("image") MultipartFile image,
@RequestPart RequestDto request) {
... (생략)
}
만약 RequestPart에 MultipartFile 데이터가 포함되어있지 않다면 RequestBody와 동일한 동작을 한다!
'Springboot > 코딩' 카테고리의 다른 글
| [Springboot] test code mockmvc perform header에 jwt 권한 인증처리 (0) | 2023.12.29 |
|---|---|
| [Spring boot] Intellij에서 ./gradlew build 안될 시 (0) | 2023.06.14 |
| [Spring boot] Spring boot + React 연동 (0) | 2023.06.14 |