상세 컨텐츠

본문 제목

[Java] 이미지 다루기_ MultipartFile 파일 업로드, 이미지 여러 장 업로드하기

Java, Spring, SpringBoot

by Jjiveloper 2021. 10. 29. 10:08

본문

728x90

JAVA MultipartFile 사진 한 장 업로드하기

/**사진 한 장 업로드**/
    public Boolean uploadImage(MultipartFile image, String dirName) throws Exception {
        Boolean result = Boolean.FALSE;
        try{
            File folder = new File(dirName);
            if (!folder.exists()) {
            	folder.mkdirs();
            }

            File destination = new File(dirPath + File.separator + image.getOriginalFilename());
            image.transferTo(destination);

            result = Boolean.TRUE;
        }catch (Exception e){
            log.error("에러 : " + e.getMessage());
        }finally {
            return result;
        }
    }

uploadImage라는 함수를 만든다.

변수로는 업로드할 파일, 지정할 폴더 명을 받아준다. 폴더 명이 고정일 경우에는 굳이 폴더명을 안받아와도 됨...

File 클래스를 이용해 폴더를 생성해준다.

경로.exists() 함수를 이용해 해당 경로에 해당 이름(dirName)을 가진 폴더가 있는지 확인한다.

벗으면 folder.mkdirs();함수를 통해 폴더를 만들어 줌.

 

그러고 또 중요한게 "File destination = new File(dirPath + File.separator + image.getOriginalFilename());" 이 부분이다.

위에서 파일을 만들고 아래쪽도 파일을 만들길래 왜그러는건지 몰랐는데...

이 부분은 디렉토리 경로를 이용해 폴더를 만듦

이건 디렉토리 + / + 저장할 이미지의 파일명을 이용해 파일을 만들어 주는 것이다.

File.separator는 운영체제 별로 경로를 구분자를 정해주는 것이라 크게는 신경 안써도 될 듯...

폴더 경로 아래에 저장할 이미지 이름도 지정해줘야 이미지가 정상적으로 저장되었다.

/**잘못된 코드 예시!!! 쓰면 안돼요**/
    public Boolean uploadImage(MultipartFile image, String dirName) throws Exception {
        Boolean result = Boolean.FALSE;
        try{
            File folder = new File(dirName);
            if (!folder.exists()) {
            	folder.mkdirs();
            }

            image.transferTo(folder);

            result = Boolean.TRUE;
        }catch (Exception e){
            log.error("에러 : " + e.getMessage());
        }finally {
            return result;
        }
    }

위의 코드 처럼 기존의 folder만 이용해서 이미지를 업로드 해보았더니

아래에 있는 것처럼 유형이 파일로 저장되었다...

아무튼 얘는 받아온 MultipartFile 이미지를 최종 경로로 보내줘서 저장하는 코드이다.

이렇게하니까 원하는 경로에 파일이 저장되는 것을 확인할 수 있다.


파일을 한장만 보내면 편하겠지만 MultipartFile 배열을 이용해 이미지를 한꺼번에 저장할 일이 더 많을 것이다! (아님 말고!)

JAVA MultipartFile 배열 사진 여러장 업로드하기 (List<MultipartFile >)

    /**사진 여러 장 업로드**/
    public Boolean uploadImage(List<MultipartFile> images, String dirName) throws Exception {
        short result = -1;
        try{
            File folder = new File(dirName);
            if (!folder.exists()) {
            	folder.mkdirs();
            }

            for(MultipartFile image : images) {
                File destination = new File(dirName + File.separator + image.getOriginalFilename());
                image.transferTo(destination);

                result++;
            }
            
        } catch (Exception e) {
            log.error("에러 : " + e.getMessage());
        } finally {
        	if(result == -1 || result < images.size() -1) {
            	return Boolean.FALSE;
            } else if(result == images.size() -1) {
            	return Boolean.TRUE;
            } else {
            	return Boolean.FALSE;
            }
        }
    }

이것도 사진 한 장 업로드하는 것과 동일하다.

단지 반복문이 추가될 뿐!!

 

마지막 return 시에 결과를 판단해서 보내주는 것이다.

이미지를 업로드하는 반복문에서 result를 1씩 증가시킨다.

만약에 사진을 3장 업로드했다면 result는 2가 나오겠지. (result를 -1로 지정해놔서)

try안에서 result를 0으로 초기화시켜도 되긴함...

포스트맨에 작성한 api 경로를 넣어주고 images라는 key를 두개 만들어서 배열로 보냈다.

결과는 아래와 같이 이미지가 여러장 저장된 것을 볼 수 있다.


원래 폴더 삭제하는 법도 같이 적으려고했는데, 글이 조금 길어져서 다음에 작성하기로 ㅎㅎ

잘못된 점, 모르는 점 있으면 언제든 댓글 남겨주세욥

728x90
반응형

관련글 더보기