[swift] Swift에서 파일의 타입 체크하는 방법

파일의 타입을 체크하는 것은 Swift에서 자주 사용되는 작업 중 하나입니다. 다양한 파일 형식에 대해 체크할 수 있으며, 이를 통해 파일을 올바른 방식으로 처리하거나, 특정 타입에 맞지 않는 파일을 거부할 수 있습니다.

파일의 확장자 체크하기

파일의 확장자를 체크하는 것은 가장 간단한 방법입니다. 다음은 Swift에서 파일의 확장자를 체크하는 예제입니다.

import Foundation

func checkFileType(filePath: String) -> String? {
    let fileURL = URL(fileURLWithPath: filePath)
    let fileExtension = fileURL.pathExtension.lowercased()
    
    switch fileExtension {
        case "txt":
            return "Text 파일"
        case "jpg", "jpeg", "png":
            return "이미지 파일"
        case "pdf":
            return "PDF 파일"
        default:
            return nil
    }
}

// 사용 예시
if let fileType = checkFileType(filePath: "/path/to/file.txt") {
    print("이 파일은 \(fileType)입니다.")
} else {
    print("지원하지 않는 파일 형식입니다.")
}

위의 예제에서는 checkFileType 함수를 사용하여 파일의 확장자를 체크합니다. URL 클래스를 사용하여 파일 경로를 URL 객체로 변환한 다음, pathExtension 속성을 사용하여 파일의 확장자를 가져옵니다. 이후에는 switch 문을 사용하여 각각의 확장자에 대해 처리할 로직을 작성합니다.

파일의 MIME 타입 체크하기

확장자만으로는 충분하지 않은 경우도 있습니다. 예를 들어, 파일을 업로드하고 업로드된 파일의 타입을 체크해야 할 때도 있습니다. 이럴 때는 파일의 MIME 타입을 체크하는 것이 더 정확한 방법일 수 있습니다.

Uniform Type Identifier를 사용하여 파일의 MIME 타입을 체크할 수 있습니다. 다음은 Swift에서 파일의 MIME 타입을 체크하는 예제입니다.

import Foundation
import MobileCoreServices

func checkFileMIMEType(filePath: String) -> String? {
    let fileURL = URL(fileURLWithPath: filePath)
    let fileExtension = fileURL.pathExtension.lowercased()
    
    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension as CFString, nil)?.takeRetainedValue() {
        let mimeType = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() as String?
        return mimeType
    }
    
    return nil
}

// 사용 예시
if let mimeType = checkFileMIMEType(filePath: "/path/to/file.txt") {
    print("이 파일의 MIME 타입은 \(mimeType)입니다.")
} else {
    print("MIME 타입을 확인할 수 없습니다.")
}

위의 예제에서는 checkFileMIMEType 함수를 사용하여 파일의 MIME 타입을 체크합니다. UTTypeCreatePreferredIdentifierForTag 함수를 사용하여 파일 확장자를 바탕으로 Uniform Type Identifier (UTI)를 가져옵니다. 이후에는 UTTypeCopyPreferredTagWithClass 함수를 사용하여 해당 UTI에 대한 MIME 타입을 가져옵니다.

이렇게 가져온 MIME 타입을 통해 파일을 올바른 방식으로 처리하거나, 특정 타입에 따라 다른 로직을 수행할 수 있습니다.

참고 자료