确定从文件加载的NSData的MIME类型

时间:2011-05-13 19:27:42

标签: iphone objective-c mime-types nsdata

出于各种原因,我使用NSURLProtocol拦截http请求并从应用程序文档目录中的文件加载内容。部分过程涉及加载NSData对象,该对象可以是从html文件到jpeg图像的任何内容。 NSURLProtocol需要设置mimetype。

iPhone-SDK中是否有API来确定文件或NSData内容的mimetype?

3 个答案:

答案 0 :(得分:32)

也许您可以下载该文件并使用this来获取该文件的MIME类型。

+ (NSString*) mimeTypeForFileAtPath: (NSString *) path {
    if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
        return nil;
    }
    // Borrowed from https://stackoverflow.com/questions/5996797/determine-mime-type-of-nsdata-loaded-from-a-file
    // itself, derived from  https://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[path pathExtension], NULL);
    CFStringRef mimeType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    if (!mimeType) {
        return @"application/octet-stream";
    }
    return [NSMakeCollectable((NSString *)mimeType) autorelease];
}

答案 1 :(得分:4)

我不熟悉SDK中的这种API。但是,如果无法保存mime类型,则可以使用MagicKit

答案 2 :(得分:0)

您是否在HTTP接受标头中看不到任何内容,如果您正在拦截请求,我希望在大多数情况下将accept标头设置为预期类型的​​mime