여러장의 이미지를 Local에 업로드하는 방법에 대해 알아 보도록 하겠습니다.
이미지 파일들을 MultipartFile
형식으로 받아 오도록 하겠습니다.
받아온 파일들을 업로드 처리하는 핸들러를 만들어서 사용하겠습니다.
@Component
public class fileHandler {
public StringBuffer saveFile(List<MultipartFile> files) throws Exception {
StringBuffer fileList = new StringBuffer();
//빈 파일 처리
if(files.isEmpty()) {
return fileList;
}
// 저장하기 위한 절대경로를 설정해주기
String absolutePath = "/Users/jjo/Desktop/MeYou/";
int index = 1;
// 서브 경로 지정
String sub_path = "meeting/";
// 실제 저장되는 경로
String path = absolutePath + sub_path;
// 폴더 생성하기
File file = new File(path);
if(!file.exists()) {
file.mkdirs();
}
for (MultipartFile multipartFile : files) {
if(!multipartFile.isEmpty()) {
String contentType = multipartFile.getContentType();
String originalFileExtension;
// 확장자 명이 없으면 이 파일은 잘 못 된 것이다
if (ObjectUtils.isEmpty(contentType)){
break;
}
else{
if(contentType.contains("image/jpeg")){
originalFileExtension = ".jpg";
}
else if(contentType.contains("image/png")){
originalFileExtension = ".png";
}
else if(contentType.contains("image/gif")){
originalFileExtension = ".gif";
}
// 다른 파일 명이면 아무 일 하지 않는다
else{
break;
}
}
// 저장되는 파일 이름
String new_file_name = index + originalFileExtension;
// 파일 생성하기
file = new File(path + "/" + new_file_name);
multipartFile.transferTo(file);
// 생성된 파일 경로 스트링 버퍼에 추가해주기
fileList.append(sub_path + "/" + new_file_name +":");
index++;
}
}
return fileList;
}
}
파일들을 /Users/jjo/Desktop/MeYou/meeting
폴더에 각 파일의 index
이름으로 저장됩니다. ex) 1.jpg , 2.jpg 3.jpg 그리고 저장된 각 파일들의 실제 경로들을 StringBuffer
로 반환해주게 됩니다.
@PostMapping("/upload")
public ResponseEntity imgUpload(@RequestParam("files") List<Multipartfile> files) throw Exception {
return ResponseEntity.ok()
.body(fileHandler.saveFile(files);
}
파일들의 실제 저장 경로가 반환되는걸 확인 할 수 있습니다.