Determine MIME Type of NSData Loaded From a File

2019-01-10 23:36发布

For various reasons I am intercepting http requests and loading content from files in my app's document directory using NSURLProtocol. Part of the process involves loading an NSData object, which could be anything from an html file to a jpeg image. NSURLProtocol requires setting a mimetype.

Is there an API in the iPhone-SDK to determine the mimetype of the file or NSData content?

3条回答
Juvenile、少年°
2楼-- · 2019-01-11 00:07

Perhaps you could download the file and use this to get the file's MIME type.

+ (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];
}
查看更多
男人必须洒脱
3楼-- · 2019-01-11 00:07

I'm not familiar with such API in the SDK. However, if there no way to save the mime-type, then you can use MagicKit.

查看更多
趁早两清
4楼-- · 2019-01-11 00:07

can you not see anything in the HTTP accept headers, if you are intercepting requests i would expect the accept header to be set to the mime of the expected type in most cases

查看更多
登录 后发表回答