2010-03-13 69 views
15

我有一個iPhone應用程序,該應用程序正在做一些智能化的事情(爲文件類型選擇合適的圖標)給出一個文件名列表。我正在尋找類似於/etc/mime.types或類似的東西的iPhone - API調用是我認爲可以用於手機的。這是否存在?iPhone MIME類型數據庫在哪裏?

回答

43

如果確實如此,您的應用肯定無權直接讀取它。你想做什麼?

編輯

這是我寫的一個,而前一個功能。我爲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

當我剛編輯我的問題更清晰一點泄漏。 – 2010-03-13 16:49:42

+1

不適用於iPhone – jww 2011-04-02 07:08:40

+8

'不適用於iPhone' - 我的不好。您需要包含MobileCoreServices框架和'#import ' – jww 2011-04-02 07:24:00

4

下面的函數將返回MIME類型爲給定的文件擴展名斯威夫特2

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 
} 
0

在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; 
}