我有一个针对iPhone的程序,应该能够通过给定的文件名列表(选出适当的文件类型图标)并做出智能决策。 我想知道iPhone是否有类似于/etc/mime.types或类似的东西 - 我假设可以在手机上使用API调用。这个存在吗?
我有一个针对iPhone的程序,应该能够通过给定的文件名列表(选出适当的文件类型图标)并做出智能决策。 我想知道iPhone是否有类似于/etc/mime.types或类似的东西 - 我假设可以在手机上使用API调用。这个存在吗?
#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];
}
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
}
}
#import <MobileCoreServices/MobileCoreServices.h>
。 - jww