哪里是iPhone MIME类型数据库?

时间:2010-03-13 16:15:29

标签: iphone objective-c cocoa cocoa-touch

我有一个iPhone程序,它应该是一个智能的东西(为文件类型选择合适的图标),给出一个文件名列表。我正在寻找类似于/etc/mime.types或类似东西的iPhone版本 - 我认为API调用可用于手机。这是否存在?

4 个答案:

答案 0 :(得分:47)

如果确实如此,您的应用肯定无权直接阅读。你想做什么?

修改

这是我刚才写的一个功能。我是为Mac编写的,但看起来iPhone上存在相同的功能。基本上,你给它一个文件名,它使用路径扩展来返回文件的MIME类型:

#import <MobileCoreServices/MobileCoreServices.h>
...
- (NSString*) fileMIMEType:(NSString*) file {
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[file pathExtension], NULL);
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    return [(NSString *)MIMEType autorelease];
}

答案 1 :(得分:4)

以下函数将返回 Swift 2

中给定文件扩展名的mime-type
import MobileCoreServices

func mimeTypeFromFileExtension(fileExtension: String) -> String? {
    guard let uti: CFString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension as NSString, nil)?.takeRetainedValue() else {
        return nil
    }

    guard let mimeType: CFString = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() else {
        return nil
    }

    return mimeType as String
}

答案 2 :(得分:1)

在obj-C中,使用C时警告内存泄漏。

- (NSString *)guessMIMETypeFromFileName: (NSString *)fileName {
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[fileName pathExtension], NULL);
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    if (!MIMEType) {
        return @"application/octet-stream";
    }
    NSString *dest = [NSString stringWithString:(__bridge NSString *)(MIMEType)];
    CFRelease(MIMEType);

    return dest;
}

答案 3 :(得分:0)

Swift 5.3 作为一个URL扩展名,更新并接受了很好的答案

extension URL {
    var mime: String {
        guard
            let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)
        else { return "" }
        let mime = uti.takeRetainedValue() as String
        uti.release()
        return mime
    }
}