[SpringBoot] API방식, File Upload 하기
- Web/SpringBoot
- 2022. 3. 11.
SpringBoot, API 방식으로 File Upload 하기
파일 업로드 설정
#MultiPart
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.location=D:\\const/test
SpringBoot를 사용한다면 위와 같은 코드를 활용하면 된다.
필요에 따라서 추가해도 되고, 삭제해도 된다.
max-file-size : 전송되는 개별 파일 크기 제한
max-request-size : 서버에 전송되는 파일의 크기 제한
location : 저장위치 기본 설정 값 (경로에 폴더가 없을 경우 폴더가 새로 생성된다)
파일 업로드하기
@PostMapping("/upload")
@ResponseBody
public void FileUpload(MultipartFile uploadfile, Model model) {
try {
if(!uploadfile.isEmpty()) {
log.info("file name : "+uploadfile.getOriginalFilename());
log.info("file content type : "+uploadfile.getContentType());
uploadfile.transferTo(new File(uploadfile.getOriginalFilename()));
}
}
catch (Exception e ) {
e.printStackTrace();
}
}
POSTMAN을 활용하여 FILEUPLOAD를 진행하였다.
이 방법을 사용하기 위해서는 MultiPartFile의 매개변수명과 key값을 일치시키기만 하면 된다.
그냥 POSTMAN에 등록시 정상적으로 FILE이 UPLOAD가 되었다.
오직 파일만을 가져오기 위한 작업이다.
그 외의 데이터를 가져올 수가 없으므로, 잘 사용하지 않는 방법이다.
파일 업로드하기 2
@PostMapping("/upload2")
@ResponseBody
public void FileUpload2(MultipartHttpServletRequest request) {
try {
log.info("/upload2");
//request의 file이름을 가져온다.
String fileName = "Mollang_"+request.getParameter("file");
String test = request.getParameter("test");
log.info(test);
MultipartFile file = request.getFile("file");
log.info(file.getOriginalFilename());
file.transferTo(new File(file.getOriginalFilename()));
}
catch (Exception e) {
}
}
현재? 주로 사용하는 방법이라고 한다.
일반적인 request가 아닌, MultipartHttpServletRequest를 사용한다.
jsp에서 사용하는 request방식으로 등록된 모든 key값을 가져올 수 있다는 장점이 있다.
그러나 request만으로 파일 업로드를 진행할 수 없으므로, Multipartfile을 중간에 삽입하여 fileUpload를 진행했다.
저장 위치 임의 지정
SpringBoot의 기본 설정이 아닌, 사용자마다 파일 저장이 필요할 경우 사용하는 방법이다.
File의 생성자에 2개의 값을 넣을 경우, 첫 번째는 경로명, 두 번째는 저장 대상인 파일을 넣을 수가 있다.
기존 SpringBoot가 폴더의 존재유무를 파악하여, 해당 경로에 맞는 폴더를 자동으로 생성해줬다면...
이 방식은 사용자가 임의로 변경했기 때문에 해당 경로에 폴더가 없을 경우 파일이 생성되지 않는다.
해결 방법
@PostMapping("/upload3")
@ResponseBody
public void FileUpload3(MultipartHttpServletRequest request) {
try {
log.info("/upload3");
//request의 file이름을 가져온다.
String fileName = "Mollang_"+request.getParameter("file");
String test = request.getParameter("test");
log.info(test);
MultipartFile file = request.getFile("file");
//File 경로 임의 지정
String uploadPath = "D:\\const/test/abc/";
File fileUpload = new File(uploadPath,file.getOriginalFilename());
//생성 될 경로가 없을 경우, 파일을 생성한다.
if(!fileUpload.exists()) {
log.info(uploadPath+" : 파일 경로 생성완료");
fileUpload.mkdirs();
}
file.transferTo(fileUpload);
}
catch (Exception e) {
}
}
String uploadPath를 통해서 file의 경로를 임의 설정을 하였다.
위의 단점은 file의 생성과 생성자 생성을 한 번에 처리한다면
이번 코드는 모두 분할하여 파일의 경로 설정 => 폴더 경로 유무 파악 => 파일 등록 진행으로 나뉜다는 점이다.
등록된 결과는 해당 경로에서 폴더를 열었을 때, 파일의 존재 유무로 성공 여부를 확인할 수가 있다.
이 방식은 SpringBoot 기본 설정하고 연관이 없으므로 properties 설정 중 File 경로를 주석 처리해도 동작이 된다.
'Web > SpringBoot' 카테고리의 다른 글
[SpringBoot] JPA 연동하기 (0) | 2022.06.16 |
---|---|
[SpringBoot] Interceptor 사용하는 방법 (0) | 2022.03.26 |
[SpringBoot] API 활용하기 (0) | 2022.03.11 |
[SpringBoot] Test, JUnit 생성하기 (0) | 2022.03.09 |
[SpringBoot] MyBatis 연동하기 (0) | 2022.03.09 |