웹 프레임워크/Spring
Spring 현재 날짜를 기준으로 업로드 폴더 생성 및 업로드
EpicArts
2021. 1. 26. 23:23
728x90
Service Layer 에서 파일 업로드 구현
@Value("${local.files-path}")
String rootPath; //properties에서 저장할 로컬 루트 경로를 가져온다.
@Override
@Transactional(rollbackFor = Exception.class)
public void storeFile(MultipartFile file) {
Date createDate = new Date();
String year = (new SimpleDateFormat("yyyy").format(createDate)); //년도
String month = (new SimpleDateFormat("MM").format(createDate)); //월
String day = (new SimpleDateFormat("dd").format(createDate)); //일
Path directory = Paths.get(rootPath, year, month, day); //Path를 사용해 디렉토리 경로 지정
//원래 파일이름 앞에 uuid를 추가시킴
String fileName = file.getOriginalFilename();
String saveFileName = uuidFileName(fileName);
try {
Files.createDirectories(directory); //경로에 폴더가 없을 경우 생성함. exception 발생하지 않음
Path targetPath = directory.resolve(saveFileName).normalize(); // 파일이름이 포함된 경로를 추가
if (Files.exists(targetPath)) {
throw new IOException("중복된 파일이 있어서 실패했습니다.");
}
file.transferTo(targetPath);
} catch (IOException e) {
e.printStackTrace();
}
}
private String uuidFileName(String originalFileName) {
UUID uuid = UUID.randomUUID();
return uuid.toString() + '_' + originalFileName;
}
728x90