Spring

Springboot 파일업로드

줘니(•̀ᴗ•́)و 2024. 1. 16. 12:56
728x90

1. 첨부파일 공격에 대비하기 위한 업로드 파일의 확장자 제한

 

  • js로 파일 사이즈나 .exe, .zip 등의 파일을 확인할 수 있는 체크함수 만들기
  • var regex = new RegExp("(.*?)\.(exe|sh|zip|alz)$");
  • formData에 데이터 추가하면서 체크함수로 파일 확인

 

 

2. 동일한 이름으로 파일이 업로드 됐을 때 기존 파일이 사라지는 문제

 

  • 중복된 이름의 파일 처리
    • 중복이 발생할 가능성이 거의 없는 문자열 생성해서 처리(시간을 밀리세컨드로 저장,  UUID 적용 등)
    • UUID(Universally Unique Identifier) : 네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약
      • UUID uuid = UUID.randomUUID();
      • String uploadFileName = uuid.toString() + "_" + multipartFile.getOriginalFilename();
  • 한 폴더 내 너무 많은 파일 생성
    • 년/월/일 단위의 폴더를 생성해서 저장
      • 컨트롤러에 년/월/일 폴더를 한번에 만들 메서드 정의

 

private String getFolder(){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = new Date();
         String str = sdf.format(date);
         return str.replace("-", File.separator);
       }

 

 

 

3. 이미지 파일의 경우에 원본 파일의 용량이 큰 경우 섬네일 이미지 생성 문제

 

  • thumbnailator 라이브러리 추가
  • 컨트롤러에서
    1. 업로드된 파일이 이미지 종류의 파일인지 확인하는 체크함수 만들기
    2. 이미지 파일인 경우, 섬네일 이미지 생성하고 저장하기

 

if(checkImageType(saveFile)){
    FileOutputStream thumbnail = new FileOutputStream(new File(uploadPath, "s_" + uploadFileName));

    Thumbnailator.createThumbnail(multipartFile.getInputStream(), thumbnail, 100, 100);
    thumbnail.close();
}

 

 

 

 

 

728x90