HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏗️
Tech Store
/
🏡
Apache TIka
🏡

Apache TIka

담당자들
카테고리
주제
나의 블로그
완료율%
프로젝트
최종 프로젝트
상태
완료
MIME 타입이란?MIME을 사용하는 이유?타입을 어떻게 알려줄까?MIME-Type 구조Apach Tika 사용법의존성 추가사용법1. 파일들을 먼저 업로드해서 타입 확인해보기2. 파일의 확장자를 변경해서 타입 확인해보기
 
 

MIME 타입이란?

  • 전자우편을 위한 인터넷 표준으로 바이너리 데이터를 ASCII 텍스트 형식으로 변환(인코딩)하기 위한 방법을 정의합니다.
 

MIME을 사용하는 이유?

  • 옛날 전자우편은 ASCII파일 전송만 가능했었다. 하지만 바이너리 파일(음악, 동영상, 문서 등) 전송이 필요해졌으며 이를 전자우편으로 전송하기 위해 개발되었다.
  • MIME표준에 정의된 Content-Type은 HTTP 통신에서 전송 데이터를 표현할때도 사용된다.
 

타입을 어떻게 알려줄까?

  • MIME으로 인코딩 한 파일은 데이터의 종류를 알려주는 Content-Type 정보를 파일 앞부분에 담습니다.
  • 브라우저의 경우 응답/요청 시 HTTP 메시지 헤더에 정보를 담아서 보내게 되는데 이 헤더에 Content-Type정보를 담아서 어떤 데이터 종류인지 알려줍니다.
 

MIME-Type 구조

  • type/subtype으로 구성되어 있습니다. (전통적으로 소문자를 사용합니다.)
  • type은 1.개별 혹은 2.멀티파트 타입이 될 수 있습니다.
[개별타입]
  • text : 텍스트를 포함한 모든 문서 (인간 readable)
  • image : 모든 종류의 이미지를 포함 (gif 포함)
  • audio : 모든 종류의 오디오 파일
  • video : 모든 종류의 비디오 파일
  • application : 모든 종류의 바이너리 데이터
기본 타입에 있어 중요 역할을 하는 주요 MIME-Type
  • text/plain
    • 서브타입이 없는 텍스트 파일을 위한 기본값입니다.
    • 서브타입이 있는 파일은 서브타입 명시되어야 올바르게 감지합니다.
  • application/octet-stream
    • 서브타입이 없는 바이너리 데이터/문서의 기본값
    • 알려지지 않은 파일 타입은 이 타입을 사용해야 합니다.
    • 웹브라우저가 실행여부를 묻기도 하는데 content-Disposition 헤더가 값 attachment와 함께 설?정되었고 “Save as” 파일을 제안하는지 여부에 따로 브라우저가 그것을 다루게 됩니다.
[멀티파트 타입]
합성된 문서를 나타내는 방법입니다.
  • multipart/form-data (보통 서버로 데이터 보낼때 사용)
    • 브라우저 → 서버로 HTML Form 내용을 전송 시 사용이 가능합니다.
    • 경계(이중대시 - -로 시작되는 문자열)로 구분되는 다른 파트들로 구성됩니다.
    • 각 파트는 자체로 개체이며 자신만의 HTTP 헤더를 가집니다.
      • ex) 파일업로드 필드를 위한 헤더인 content-Diposition, 가장 일반적인 Content-Type
      notion image
  • multipart/byteranges
    • 브라우저로 회신하는 부분적인 응답 전송의 context 내에서 사용됩니다.
    • 206 Partial Content 상태 코드가 전송된 경우, MIME 타입은 문서가 각각의 요청된 범위 중 하나인 몇 가지 파트로 구성되어 있음을 알리기 위해 사용됩니다.
    • boundary 디렉티브를 통해 경계선 문자열을 정의합니다.
    • 각각 다른 파트들은 문서 타입을 나타내는 Content-Type 헤더와 범위를 나타내는 Content-Range를 가집니다.
    • notion image
  • MIME Type 전체목록
    • application
    • audio
    • font
    • example
    • image
    • message
    • model
    • multipart
    • text
    • video

Apach Tika 사용법

 

의존성 추가

implementation 'org.apache.tika:tika-core:1.4' implementation 'org.apache.tika:tika-parsers:2.3.0'

사용법

  • 간단하게 넘어온 파일의 실제 MIME 타입을 확인해 보겠습니다.
@PostMapping public void test(MultipartFile[] multipartFiles) throws IOException { Tika tika = new Tika(); for (MultipartFile file : multipartFiles) { String mimeType = tika.detect(file.getBytes()); System.out.println("**************************"); System.out.println(file.getOriginalFilename()); System.out.println("mimeType = " + mimeType); System.out.println("**************************"); } }
 

1. 파일들을 먼저 업로드해서 타입 확인해보기

  • 현재 제 폴더에는 2개의 jpeg와 하나의 pdf파일이 존재하며 세개의 파일을 모두 컨트롤러로 요청을 보내보겠습니다.
notion image
notion image
  • 아래의 결과를 보면 제대로된 타입이 나오는걸 확인하실 수 있습니다.
notion image

2. 파일의 확장자를 변경해서 타입 확인해보기

🧐
인스타뀨램 프로젝트를 진행했을 때 확장자를 잘 체크하도록 동작은 했지만 실제 확장자와 맞지 않는 타입을 강제로 확장자 타입에 맞게 변경한 후에 요청된 파일들에 대해서는 제대로 검증하지 못한 문제점이 존재했었습니다.
  • 신청서의 pdf파일을 png로 변환시킨 후 컨트롤러로 요청을 보내보겠습니다.
notion image
notion image
  • 아래의 결과를 보면 파일의 이름에는 png로 변경되어 있지만 실제 mimeType은 그대로 application/pdf로 출력되는 모습을 확인하실 수 있습니다.
notion image