본문 바로가기
프로그래밍/자바

자바(Java)로 파일의 마임 타입(MIME Type) 확인하기

by pentode 2018. 8. 21.

파일 다운로드를 구현할때 파일에 직접 링크를 하지 않고, 프로그램을 사용해서 웹루트 밖의 저장소에서 파일을 읽어서 브라우저로 보내야 하는 경우가 많이 있습니다. 이때 파일의 마임 타입(MIME Type)을 지정해줄 필요가 있습니다. Java언어로 파일의 마임 타입을 알아내는 방법을 알아 봅니다.





1. Files 객체의  probeContentType() 메소드를 사용하는 방법

Java 7 부터 지원합니다. 이 메소드는 마임타입을 확인하지 못하면 null을 반환합니다.


package com.tistory.offbyone;


import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;


public class FindMimeType {

  public static void main(String[] args) throws IOException {

    Path source = Paths.get("D:/sample.txt");

    String mimeType = Files.probeContentType(source);

    System.out.println(mimeType);

  }

}


result)

text/plain



실제 파일의 내용이 아니라 파일의 확장자를 이용하여 마임타입을 판단합니다. 그러므로 확장자가 없는 파일은 null을 반환합니다. 실제 파일이 존재하지 않아도 확장자로 마입타입을 반환합니다.



2. URLConnection 객체를 사용하는 방법


package com.tistory.offbyone;


import java.net.URLConnection;


public class FindMimeType {

  public static void main(String[] args) {

    String mimeType = URLConnection.guessContentTypeFromName("D:/sample.txt");

    System.out.println(mimeType);

  }

}


result)

text/plain


이 방법 또한 확장자를 이용하여 마임타입을 결정합니다. 확장자가 없으면 null을 반환합니다. 실제 파일이 존재하지 않아도 확장자로 마임타입을 결정합니다.



3. MimetypesFileTypeMap 객체를 사용하는 방법

JAF API에 포함되어 있는 객체입니다. JDK 6 부터 포함되어 있습니다.


package com.tistory.offbyone;


import javax.activation.MimetypesFileTypeMap;


public class FindMimeType {

  public static void main(String[] args) {

    MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();

    String mimeType = mimeTypesMap.getContentType("D:/sample.txt");

    System.out.println(mimeType);

  }

}


result)

text/plain


파일 확장자를 이용하여 마임타입을 결정합니다. 확장자가 없거나, 판단하지 못하면 application/octet-stream 을 반환합니다.



4. Apache Tika 라이브러리를 사용하는 방법


Apache Tika 는 컨텐츠 분석 툴킷입니다. ppt, xls, pdf 와 같은 파일에서 메타 데이터와 텍스트를 탐지하고 추출하는데 사용되어 집니다. 마임타입을 확인하는 기능도 있습니다.


Maven을 사용한다면 pom.xml 파일에 의존성을 추가합니다. 아니면 사이트에서 라이브러리를 다운로드 받아 classpath에 추가합니다.


<dependency>

    <groupId>org.apache.tika</groupId>

    <artifactId>tika-parsers</artifactId>

    <version>1.18</version>

</dependency>


tika-parsers를 추가하면 tika-core도 포함됩니다.


package com.tistory.offbyone;


import java.io.File;

import java.io.IOException;


import org.apache.tika.Tika;


public class FindMimeType {

  public static void main(String[] args) throws IOException {

    File file = new File("D:/sample.txt");

    String mimeType = new Tika().detect(file);

    System.out.println(mimeType);

  }

}


result)

image/jpeg


이 예제에서는 jpg 파일의 확장자를 txt로 변경하여 테스트 하였습니다. Tika 라이브러리는 실제 파일의 내용을 검사하여 마임타입을 판단합니다. 파일이 존재하지 않으면 FileNotFoundException이 발생합니다.

반응형