iPhone MIME 类型数据库在哪里?

Posted

技术标签:

【中文标题】iPhone MIME 类型数据库在哪里?【英文标题】:Where's the iPhone MIME type database? 【发布时间】:2011-01-27 04:43:30 【问题描述】:

我有一个 iPhone 程序,它应该在给定文件名列表的情况下执行智能操作(为文件类型挑选适当的图标)。我正在寻找 iPhone 上的 /etc/mime.types 或类似的东西——我假设 API 调用可用于手机。这存在吗?

【问题讨论】:

【参考方案1】:

如果是这样,您的应用肯定没有权限直接读取它。你想做什么?

编辑

这是我前段时间写的一个函数。我是为 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];

【讨论】:

Does not work on iPhone - 我的错。您需要包含 MobileCoreServices 框架和#import &lt;MobileCoreServices/MobileCoreServices.h&gt; 我在一个 iPad 设备 (iPad 1st gen / 5.1.1) 上的 pdf 文件代码有问题,但在另一个 (iPad 3 / 5.1.1) 或模拟器 ( 5.1)。 pathExtension 是 pdf,UTI 以 com.adobe.pdf 的形式返回 OK,但 MIMEType 返回 nil。有什么可能导致这种情况吗?设备上的 MIMEType 注册表会损坏吗? @slf 是的,这基本上等同于答案中的内容。【参考方案2】:

以下函数将返回 Swift 2

中给定文件扩展名的 mime 类型
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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

更新对 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
    

【讨论】:

以上是关于iPhone MIME 类型数据库在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以找到文本 MIME 类型的列表?

在哪里可以获得 mime.types 文件的副本? [关闭]

mac和linux中mime插件文件的位置在哪里?

邮件发送的 MIME 类型分类?

在 DRUPAL 中验证 PDF 文件上传中的 MIME 类型

解析 MIME 邮件类型