其中';iPhone MIME类型数据库是什么?
我有一个用于iPhone的程序,该程序根据文件名列表执行智能操作(为文件类型选择合适的图标)。我正在寻找类似于/etc/mime.types或者类似的东西的iPhone——我假设手机可以使用API调用。这个存在吗?如果存在,你的应用肯定没有权限直接读取它。你想干什么 编辑 这是我不久前写的一个函数。我是为Mac写的,但看起来iPhone上也有相同的功能。基本上,您给它一个文件名,它使用路径扩展名返回文件的MIME类型:其中';iPhone MIME类型数据库是什么?,iphone,objective-c,cocoa,cocoa-touch,Iphone,Objective C,Cocoa,Cocoa Touch,我有一个用于iPhone的程序,该程序根据文件名列表执行智能操作(为文件类型选择合适的图标)。我正在寻找类似于/etc/mime.types或者类似的东西的iPhone——我假设手机可以使用API调用。这个存在吗?如果存在,你的应用肯定没有权限直接读取它。你想干什么 编辑 这是我不久前写的一个函数。我是为Mac写的,但看起来iPhone上也有相同的功能。基本上,您给它一个文件名,它使用路径扩展名返回文件的MIME类型: #import <MobileCoreServices/MobileC
#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];
}
#导入
...
-(NSString*)文件MIMETYPE:(NSString*)文件{
CFStringRef UTI=UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)[文件路径扩展名],NULL);
CFStringRef MIMEType=UTTypeCopyPreferredTagWithClass(UTI,kUTTagClassMIMEType);
CFD释放(UTI);
return[(NSString*)MIMEType autorelease];
}
以下函数将返回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
}
在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;
}
更新对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上不起作用
-我的坏。您需要包括MobileCoreServices框架,并且导入我在一台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是的,这基本上等同于答案中的内容。