Back-end

[SpringBoot] 파일 관련 라이브러리 - Apache Tika (feat. 파일 유효성 체크)

somuxsomu 2024. 3. 13. 17:01

 

Apache Tika 

자바 파일 관련 라이브러리

 

 

주로 프론트에서 파일 유효성 체크를 검사 하지만,

백단에서도 한번 더 해주는게 좋기 때문에

 

오늘은 쉽고 간편하게

 

백단(Java)에서 쉽게 파일 유효성 체크 하는 방법을 정리해보려고 한다 !

 


 

바로 그 방법은

Apache Tika 라이브러리

사용하면 쉽고 간단하게 사용 할 수 있다.

 


Apache Tika(아파치 티카) 라이브러리란?

문서 타입 검출 및 다양한 파일 형식에서 컨텐츠를 추출하는 기능을 제공하는 라이브러리이다.

Tika를 활용해 광범위한(universal) 타입 검출기 및 스프레드 시트, 텍스트 문서, 이미지, PDF 및 멀티미디어 입력 포맷 등의 다양한 형식의 문서에서 구조화된 텍스트와 메타 데이터를 추출할 수 있는 컨텐츠 추출기를 제작할 수 있다.


 

 

자바 프로젝트에서 Apache Tika 라이브러리를 사용하려면,

메이븐, 그레이들 환경에 맞춰서 사용하기 위해 추가를 해줘야한다.

 

 

👉🏼 설치 방법

 

1. maven인 경우에는,

 

pom.xml

아래와 같이 Tika 라이브러리 dependency를 추가해주면 된다.

<dependency>
	<groupId>org.apache.tika</groupId>
	<artifactId>tika-parsers</artifactId>
	<version>1.24.1</version>
</dependency>

 

Maven dependency : https://mvnrepository.com/artifact/org.apache.tika/tika-core/2.7.0

 

pom.xml 파일을 저장해주고

 maven update project를 해주면,

Tika 라이브러리를 사용할 수 있다.

 

 

 

2. gradle인 경우에는,

 

아래와 같이 작성하면 된다.

// https://mvnrepository.com/artifact/org.apache.tika/tika-core
implementation group: 'org.apache.tika', name: 'tika-core', version: '2.7.0'

 

 

두가지 방법다 별거 없다 

아주 쉽다 ㅎ___ㅎ

 

 


 

 

Apache Tika 라이브러리를 통해 

 

1. metadata 체크

 2. mime type 체크

3. charset 체크

 

 등을

확인 할 수 있는 메소드들이 있다.

 

 

Tika에서 제공해주는 메소드를 이용 및 활용해서 개발을 하면 된다 !

 

 

예를들면,

FileUtil.java 같은 공통 파일을 만들거나

또는 사용하고 있는 공통 유틸이 있다면

그곳에 Tika에서 제공하는 메소드를 이용해서

만들어서 호출해서 사용하면 좋다 !

 

 

아무튼,

실제로 사용하는곳에서 호출해서 사용하면 좋다.

(여기저기 사용되는곳이 많으니 공통으로 만들자!)

 


 

이제 본격적으로 mime type을 체크하는 방법에 대해 알아보자 !

 

 

아래 코드(이미지)는

파일 mime type을 체크하는 로직이다.

 

 

private static Tika tika;

=> Tika를 사용하기 위해서 선언해주고, 

메소드를 만들어 위에 선언한 Tika로

new를 해준다.

 

 

파일 유효성 검사를 하기 위해 만든 메소드이기 때문에,

인자로 MultipartFile을 받아주고

getInputStream()을 해서

 

tika detect를 통해 해당 파일의 확장자를 알 수 있다.

 

위의 결과를 String에 담아주고,

List image에 파일 확장자를 넣어주고,

상수로 선언해준다.

이렇게 해줘야지 나중에 유지보수 하기도 편하고

다른 메소드에서도 사용하기 좋다.

 

contains를 사용해서 해당 확장자가 있는지 체크를 해주고

있으면 true로 리턴해주고, 아니면 false로 리턴해주게끔

만들어 주면

 

끝 ! 

 

 

아주 간단하게 기능을 구현 할 수있다.

 

Tika에서 제공해주는 메소드들을 확인하여

활용해서 사용하면 아주 좋을것 같다 :)

 


 

👉🏼 활용 예제 코드

metadata 체크, mime type 체크, charset 체크

 

필요한 코드 복사해서 사용하세요 ! 

 

 

- Metadata 체크

public static void checkMetadata() {
		
		Tika tika = new Tika();
		Metadata metadata = new Metadata();

		try (TikaInputStream reader = TikaInputStream.get(Paths.get(DEFAULTPATH))){
			
			// 파일 본문
			String contents = tika.parseToString(reader, metadata);

			/*
			 * 파일 메타데이터 X-Parsed-By: org.apache.tika.parser.DefaultParser
			 * Content-Encoding: UTF-8
			 * csv:delimiter: comma
			 * Content-Type: text/csv; charset=UTF-8; delimiter=comma
			 */
             
	        for(String name : metadata.names()) {
	            System.out.println(name + ": " + metadata.get(name));
	        }
			
		} catch (IOException | TikaException e) {
			e.printStackTrace();
		}
		
	}

 

 

- MimeType 체크

public static void checkMimeType(File file) {
		String mimeType;
		Tika tika = new Tika();
		
		try {
			mimeType = tika.detect(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

 

- Charset 체크

public static void chcekCharset() {
		try {
			byte[] arr = Files.readAllBytes(Paths.get(DEFAULTPATH));
			
			CharsetDetector charsetDetector = new CharsetDetector();
			charsetDetector.setText(arr);
			charsetDetector.enableInputFilter(true);
			CharsetMatch cm = charsetDetector.detect();
			
			System.out.println(cm.getName());
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

참고

 https://www.tutorialspoint.com/tika/index.htm

 

TIKA Tutorial

TIKA Tutorial - This tutorial provides a basic understanding of Apache Tika library, the file formats it supports, as well as content and metadata extraction using Apache Tika.

www.tutorialspoint.com