순서
1. 파일 저장
2. UUID 적용
1. 파일 저장
뷰로 전달받은 파일을 지정한 폴더에 저장하기 위해 MultipartFile 클래스의 transferTo() 메서드를 사용했습니다.
사용 방법은 전달받은 파일인 MultipartFile 객체에 저장하고자 하는 위치를 지정한 File 객체를 파라미터로 하여 transferTo() 메서드를 호출하는 것입니다.
MultipartFile.transferTo(File detination);
위의 메서드를 사용하기 위해 저장될 파일 이름과 위치 전체를 포함하는 File 객체를 만들어줍니다.
파일 이름의 경우 뷰로부터 전달받은 파일 이름을 그대로 사용하기 위해 getOriginalFilename() 메서드를 사용합니다.
파일의 경로는 uploadPath 변수를 사용합니다.
File 객체를 만들어 주기 전 먼저 파일의 이름을 사용하기 위해 아래와 같이 String 타입의 uploadFileName 변수를 선언하여 파일 이름을 저장합니다.
/* 파일 이름 */ // 뷰로부터 전달받은 파일 이름을 그대로 사용할 것
String uploadFileName = multipartFile.getOriginalFilename();
파일 저장 위치인 uploadPath와 파일 이름인 uploadFileName을 활용하여 아래와 같이 File 타입의 saveFile 변수를 선언하고 파일 경로와 파일 이름을 포함하는 File 객체로 초기화합니다.
파일을 저장하는 메서드인 transferTo() 메서드도 호출합니다.
/* 파일 이름 */ // 뷰로부터 전달받은 파일 이름을 그대로 사용할 것
String uploadFileName = multipartFile.getOriginalFilename();
/* 파일 위치, 파일 이름을 합친 File 객체 */
File saveFile = new File(uploadPath, uploadFileName);
/* 파일 저장 */
multipartFile.transferTo(saveFile);
이때 transferTo() 메서드 경우 IOException과 IllegalStateException을 발생시킬 가능성이 있기 때문에 컴파일러에서 try-catch문을 사용하라는 경고 문이 뜹니다. 따라서 파일을 저장하는 코드를 try-catch문으로 감싸줍니다.
/* 파일 이름 */ // 뷰로부터 전달받은 파일 이름을 그대로 사용할 것
String uploadFileName = multipartFile.getOriginalFilename();
/* 파일 위치, 파일 이름을 합친 File 객체 */
File saveFile = new File(uploadPath, uploadFileName);
/* 파일 저장 */
try {
multipartFile.transferTo(saveFile);
} catch (Exception e) {
e.printStackTrace();
}
모두 작성했으면 서버를 실행시켜 파일이 저장되는지 확인해봅니다.
2. UUID 적용
업로드 구현이 끝났지만, 한 가지 문제가 발생합니다. 바로 동일한 이름을 가진 파일을 저장하게 되면, 기존 파일을 덮어 씌워 버린다는 점입니다. 이러한 문제점을 해결하기 위해 각 파일이 저장될 때 고유한 이름을 가지도록 했습니다.
UUID(범용 고유 식별자)
국제기구에서 표준으로 지정한 식별자(일련번호)입니다. UUID는 총 5개의 버전이 있으며, 각 버전에 따라 식별자 생성 방식에 차이가 있습니다.
저는 버전 4(랜덤) 방식의 randomUUID() 메서드를 사용했습니다.
해당 메서드는 정적(static) 메서드이기 때문에 UUID를 인스턴스화 하지 않고 사용할 수 있습니다.
주의할 점은 UUID.randomUUID() 메서드를 통해 생성된 식별자는 UUID 타입의 데이터이기 때문에 toString() 메서드를 사용하여 String 타입으로 변경해줘야 한다는 것입니다.
저는 파일 이름을 "UUID_파일 이름"의 방식으로 저장되게 했습니다.
먼저 UUID를 저장할 String 타입의 변수 uuid를 선언하고 UUID로 초기화합니다.
String uuid = UUID.randomUUID().toString();
uploadFileName = uuid + "_" + uploadFileName;
서버를 실행시켜 uuid가 적용된 파일로 저장되는지 확인합니다.
'😎 STS3 Spring 쇼핑몰' 카테고리의 다른 글
STS3 쇼핑몰 프로젝트[24] 상품 이미지 업로드(썸네일 생성 및 저장2) - 5 (0) | 2022.09.26 |
---|---|
STS3 쇼핑몰 프로젝트[24] 상품 이미지 업로드(썸네일 생성 및 저장) - 5 (0) | 2022.09.26 |
STS3 쇼핑몰 프로젝트[24] 상품 이미지 업로드(저장 폴더 생성) - 3 (0) | 2022.09.25 |
STS3 쇼핑몰 프로젝트[24] 상품 이미지 업로드(파일 서버 전송) - 2 (0) | 2022.09.25 |
STS3 쇼핑몰 프로젝트[24] 상품 이미지 업로드(파일 서버 전송) - 1 (0) | 2022.08.04 |