Расширение пути и тип MIME файла в swift

Я изучаю swift ,и я сделал таблицу с ячейками, которые показывают изображение, и классы в группах по типу MIME (используя расширение пути). У меня был вопрос о продлениях. Если изображения (например, это может быть видео или pdf) взяты из интернета, я не уверен, есть ли у них расширение или нет Как я могу получить тип файла внутри моей файловой системы без использования расширения пути ? PS :извините за мой плохой английский, это не мой родной язык

3 ответов


предполагая, что вы получаете свои данные как NSData, следуйте этому сообщению:https://stackoverflow.com/a/5042365/2798777

в Swift, например:

var c = [UInt32](count: 1, repeatedValue: 0)
(data as! NSData).getBytes(&c, length: 1)
switch (c[0]) {
case 0xFF, 0x89, 0x00:
    println("image")
case 0x47:
    println("gif")
default: 
    println("unknown: \(c[0])")
}

Если кто-то хочет получить MimeType из фактического URL-адреса файла, этот код работал для меня:

import MobileCoreServices

func mimeTypeForPath(path: String) -> String {
    let url = NSURL(fileURLWithPath: path)
    let pathExtension = url.pathExtension

    if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension! as NSString, nil)?.takeRetainedValue() {
        if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
            return mimetype as String
        }
    }
    return "application/octet-stream"
}

чтобы получить расширение от UTI, вот Swift 4.1 код:

import AVFoundation

extension AVFileType {
    /// Fetch and extension for a file from UTI string
    var fileExtension: String {
        if let ext = UTTypeCopyPreferredTagWithClass(self as CFString, kUTTagClassFilenameExtension)?.takeRetainedValue() {
            return ext as String
        }
        return "None"
    }
}

mov на com.apple.quicktime-movie