본문 바로가기

일단 해보기

[Java] Tika를 이용한 MimeType 확인 & FilenameUtils로 확장자 추출

Tika로 MimeType 체크

spring에서 파일을 업로드할 시 파일 확장자를 제한하기 위해 MimeType을 체크하려 한다. Tika를 이용하면 파일 확장자가 아닌 파일 내용을 기반으로 판단하기 때문에, 확장자를 변경해도 MimeType을 알아낼 수 있다.

1. Maven을 이용해 Tika 추가

 

<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers -->
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.14</version>
</dependency>

pom.xml에 Tika를 추가한다. 다른 버전을 추가하고 싶으면 링크에서 확인.

2. 업로드 컨트롤러에 코드 구현

public void fileUpload(MultipartFile file) {
    // ...
    Input Stream inputStream;
    try {
        inputStream = file.getInputStream();
        String mimeType = new Tika.detect(inputStream);
        
        // 허용하는 MIME 타입인지 확인
        if (!(mimeType.equals("jpg"))) {
            // 오류 출력
        } else {
            // 파일 업로드
        }
    }
}

FilenameUtils로 확장자 구하기

확장자를 구할 때 .을 기준으로 substring을 하는 경우가 많지만, 아파치에서 제공해주는 클래스를 이용하면 간단하게 확장자를 추출할 수 있다.

String uploadFile = new String("foo.jpg")

FilenameUtils.getName(uploadFile) // foo.jpg
FilenameUtils.getBaseName(uploadFile) // foo
FilenameUtils.getExtension(uploadFile) // jpg