TIL(Today I Learned)

TIL - Apache Tika로 이미지 타입 검사

Happy._. 2024. 7. 9. 22:37

Apache Tika

https://tika.apache.org/

다양한 문서( Word, Excel, PDF 등) 및 멀티미디어(JPEG, MP4 등) 파일에서 콘텐츠 및 메타데이터를 추출하기 위한 Tool kit

build.gradle.kts에 의존성 추가

  • tika-core: 파일 타입 체크(단순 파일 타입 체크는 core만 의존성 추가하면 됨)
  • tika-parsers: 파일 구문 분석(파일 안의 내용 체크)
implementation ("org.apache.tika:tika-core:2.9.0")
implementation ("org.apache.tika:tika-parsers-standard-package:2.9.0")

💡파일 내부의 여러 content type 확인은 tika-parsers가 필요!! (예: zip 파일)

확장자가 임의로 변경된 파일인지 확인하기 위한 준비

테스트에 사용할 파일을 생성한다. → 텍스트 파일의 확장자를 png로 변경

확장자를 png 파일로 변경하면 이미지로 인식되지만 메모장으로 열어보면 텍스트가 있다.

test.png
0.00MB

 

 

위 파일의 MIME type을 확인할 코드를 다음과 같이 작성한다.

class FileTypeParser {

    companion object {
        private val tika = Tika()

        fun parser(file: MultipartFile) {
            val detectedMimeType = tika.detect(file.inputStream)

            if (detectedMimeType != file.contentType) {
                throw IllegalArgumentException("이미지 파일이 아닙니다.")
            }
        }
    }
}

 

서버를 실행해 위 파일을 업로드 요청하면 다음과 같은 결과를 볼 수 있다.

 

임의로 변경하지 않은 이미지(.png) 파일을 업로드하면 contentType과 MIME type이 일치하기 때문에 예외를 발생시키지 않는다.