HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🛁
공부기록
/
🍀
Spring
/
⏰
Apach Tika 사용법
⏰

Apach Tika 사용법

MIME 타입이란?MIME을 사용하는 이유?타입을 어떻게 알려줄까?MIME-Type 구조Apach Tika 사용법의존성 추가사용법1. 파일들을 먼저 업로드해서 타입 확인해보기2. 파일의 확장자를 변경해서 타입 확인해보기REF.
 
 

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
 

REF.

www.baeldung.com
https://www.baeldung.com/java-file-mime-type
MIME-Type, Content-Type 이란?
Internet media typeas defined byMultipurpose Internet Mail Extensions 전자우편을 위한 인터넷 표준 포멧이다. 바이너리 데이터를 ASCII 텍스트 형식으로 변환(인코딩)하기 위한 방법을 정의한다. 옛날 전자우편은 ASCII파일 (ASCII 공통 표준 따르는 텍스트 파일) 전송만 가능했다. 그런데 바이너리 파일(음악,동영상,워드 파일) 전송이 필요졌고 이를 전자우편으로 전송하기 위해 개발되었다. MIME 표준에 정의된 Content-Type들은 HTTP 통신에서 전송 데이터를 표현할때도 사용된다.
MIME-Type, Content-Type 이란?
https://11001.tistory.com/94
MIME-Type, Content-Type 이란?
Content-type과 MIME type
표준 GraphQL POST 요청은 application/json content-type을 사용해야 합니다.출처: graphql-kr.github.io/learn/serving-over-http/#post-request 물론 content-type이 헤더에 담겨져 있는 것은 알고 있었으나, mime type과 같이 엮어 살펴본 적은 없어서 찾아봤다. developer.mozilla.org/ko/docs/Web/HTTP/Headers/Content-Type Content-Type: text/html; charset=utf-8 Content-Type: multipart/form-data; boundary=something Content-Type 헤더는 메일 메시지가 담고 있는 데이터가 어떤 종류의 데이터인지를 알려준다 Content 헤더는 Accept 관련 헤더와 대응된다.
Content-type과 MIME type
https://darrengwon.tistory.com/1169
Content-type과 MIME type