Android - 파일의 MimeType(확장자) 가져오는 방법

JS · 11 Apr 2020

안드로이드에서 제공하는 MimeTypeMap을 이용하면 파일 확장자(file extension)로부터 Mime type을 쉽게 가져올 수 있습니다.

Intent는 Mime type 정보를 갖고 있고, 이 인텐트를 실행할 때 이 파일을 처리할 수 있는 앱을 찾을 때 Mime type이 사용됩니다.

인텐트와 mimetype에 대해서 좀 더 알고 싶다면 안드로이드의 명시적(Explicit), 암시적(Implicit) 인텐트 완벽히 이해하기!를 참고해주세요.

MimeTypeMap은 다음과 같은 api를 제공합니다.

  • getMimeTypeFromExtension
  • getExtensionFromMimeType
  • getFileExtensionFromUrl

File extension으로 Mime type 가져오기

MimeTypeMap은 Singleton으로 구현되어있어서 객체를 생성할 때는 getSingleton()을 사용합니다.

import android.webkit.MimeTypeMap

val mimeTypeMap = MimeTypeMap.getSingleton()

getMimeTypeFromExtension()에 인자로 extension을 넘겨주면, 그 extension에 해당하는 Mime type을 리턴합니다.

val mimeTypeMap = MimeTypeMap.getSingleton()
val extensions = listOf("gif", "pdf", "png", "mp3", "avi")
for (extension in extensions) {
    val mimeType = mimeTypeMap.getMimeTypeFromExtension(extension)
    Log.d(TAG, "extension: $extension, mimeType: $mimeType")
}

결과

04-12 13:55:36.833  7523  7556 D Test    : extension: gif, mimeType: image/gif
04-12 13:55:36.833  7523  7556 D Test    : extension: pdf, mimeType: application/pdf
04-12 13:55:36.833  7523  7556 D Test    : extension: png, mimeType: image/png
04-12 13:55:36.833  7523  7556 D Test    : extension: mp3, mimeType: audio/mpeg
04-12 13:55:36.833  7523  7556 D Test    : extension: avi, mimeType: video/avi

Java는 다음과 같이 구현할 수 있습니다.

MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
List<String> extensions = Arrays.asList("gif", "pdf", "png", "mp3", "avi");
for (String extension : extensions) {
    String mimeType = mimeTypeMap.getMimeTypeFromExtension(extension);
    Log.d(TAG, "extension: " + extension + ", mimeType: " + mimeType);
}

URL로 Mime type 가져오기

이미지, 동영상 파일의 URL으로 Mime type을 가져올 수 있습니다.

getFileExtensionFromUrl()의 인자에 URL을 넘겨주면 그 URL의 파일에 해당하는 Mime type을 리턴합니다.

val imageUrl =
    "https://codechacha.com/static/0bb542e37e34c07735c5e68375497bde/f948d/9keys0.png"
val mimeTypeMap = MimeTypeMap.getSingleton()
val extension = MimeTypeMap.getFileExtensionFromUrl(imageUrl)
val mimeType = mimeTypeMap.getMimeTypeFromExtension(extension)
Log.d(TAG, "extension: $extension, mimeType: $mimeType")

결과

04-12 14:00:39.218  7840  7873 D Test    : extension: png, mimeType: image/png

Java는 다음과 같이 구현할 수 있습니다.

String imageUrl = "https://codechacha.com/static/0bb542e37e34c07735c5e68375497bde/f948d/9keys0.png";
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String extension = mimeTypeMap.getFileExtensionFromUrl(imageUrl);
String mimeType = mimeTypeMap.getMimeTypeFromExtension(extension);
Log.d(TAG, "extension: " + extension + ", mimeType: " + mimeType);

Mime type으로 extension(확장자) 가져오기

반대로 Mime type으로 extension을 구할 수도 있습니다.

getExtensionFromMimeType()의 인자로 Mime type을 전달하면 extension이 리턴됩니다.

val mimeTypeMap = MimeTypeMap.getSingleton()
val mimeTypes = listOf("application/pdf", "image/png",
        "audio/mpeg", "video/avi", "image/gif")
for (mimeType in mimeTypes) {
    val extension = mimeTypeMap.getExtensionFromMimeType(mimeType)
    Log.d(TAG, "mimeType: $mimeType, extension: $extension")
}

결과

04-12 13:57:41.627  7721  7769 D Test    : mimeType: application/pdf, extension: pdf
04-12 13:57:41.627  7721  7769 D Test    : mimeType: image/png, extension: png
04-12 13:57:41.627  7721  7769 D Test    : mimeType: audio/mpeg, extension: mp3
04-12 13:57:41.627  7721  7769 D Test    : mimeType: video/avi, extension: avi
04-12 13:57:41.627  7721  7769 D Test    : mimeType: image/gif, extension: gif

Java는 다음과 같이 구현할 수 있습니다.

MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
List<String> mimeTypes = Arrays.asList("application/pdf", "image/png",
        "audio/mpeg", "video/avi", "image/gif");
for (String mimeType : mimeTypes) {
    String extension = mimeTypeMap.getExtensionFromMimeType(mimeType);
    Log.d(TAG, "mimeType: " + mimeType + ", extension: " + extension);
}

참고

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha