10 . SpringBoot - 이미지 업로드 ( Multipartfile )

JJo·2021년 6월 18일
0

React + SpringBoot

목록 보기
11/12

시작

여러장의 이미지를 Local에 업로드하는 방법에 대해 알아 보도록 하겠습니다.

1. 이미지 업로드

이미지 파일들을 MultipartFile 형식으로 받아 오도록 하겠습니다.

handler

받아온 파일들을 업로드 처리하는 핸들러를 만들어서 사용하겠습니다.

@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 로 반환해주게 됩니다.

Controller

@PostMapping("/upload")
public ResponseEntity imgUpload(@RequestParam("files") List<Multipartfile> files) throw Exception {
	return ResponseEntity.ok()
    		.body(fileHandler.saveFile(files);
}

파일들의 실제 저장 경로가 반환되는걸 확인 할 수 있습니다.

마침

profile
안녕하세용!!!

0개의 댓글