본문 바로가기

웹 프레임워크/Spring

Spring 현재 날짜를 기준으로 업로드 폴더 생성 및 업로드

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