본문 바로가기

MimetypesFileTypeMap



첨부파일의 타입을 체크해야 할 때 해당 파일의 MimeType 을 살펴보면 어떤 파일인지 알 수 있는데, png 이미지 파일의 MimeType 이 image/png 이 아닌 application/octet-stream 로 넘어오는 현상을 발견했다.


new MimetypesFileTypeMap().getContentType(filename);


위와 비슷하게 MimetypesFileTypeMap() 을 사용했는데 이 메소드는 주어진 파일의 확장자를 이용하여 MimeType 을 확인하기 위해 사용자 시스템에서 다음의 순서로 mime.types 파일을 찾는다.


  1. 프로그래밍 방식으로 MimetypesFileTypeMap 인스턴스에 항목 추가
  2. 사용자의 홈 디렉토리에 있는 .mime.types
  3. <java.home>/lib/mime.types
  4. META-INF/mime.types
  5. META-INF/mimetypes.default (일반적으로 activation.jar 파일에만 있다.)


이 과정에서 mime.types 파일을 찾지 못하면 MimeType 으로 application/octet-stream 를 반환한다. 이 메소드는 주어진 파일의 확장자만 이용하여 파일의 타입을 판단하기 때문에 처리 시간이 아주 짧지만 사용자 시스템의 환경에 따라 정확도는 떨어진다. 웹 서버에는 흔히 META-INF/mime.types 파일이 있지만 사용자 환경에서 개발시에는 결과값이 다를 수 있다.