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 <MobileCoreServices/MobileCoreServices.h>
我在一个 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.types 文件的副本? [关闭]