我有一个iPhone程序,它应该是一个智能的东西(为文件类型选择合适的图标),给出一个文件名列表。我正在寻找类似于/etc/mime.types或类似东西的iPhone版本 - 我认为API调用可用于手机。这是否存在?
答案 0 :(得分:47)
如果确实如此,您的应用肯定无权直接阅读。你想做什么?
修改强>
这是我刚才写的一个功能。我是为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 :(得分:4)
以下函数将返回 Swift 2
中给定文件扩展名的mime-typeimport 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
}
答案 2 :(得分:1)
在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;
}
答案 3 :(得分:0)
将 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
}
}