Where's the iPhone MIME type database?

后端 未结 4 1745
太阳男子
太阳男子 2020-12-02 10:36

I have a program for the iPhone that is supposed to be doing intelligent things (picking out appropriate icons for file types) given a list of filenames. I\'m looking for t

相关标签:
4条回答
  • 2020-12-02 11:23

    The following function will return the mime-type for a given file extension in Swift 2

    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
    }
    
    0 讨论(0)
  • 2020-12-02 11:23

    Updating the great and accepted answer to Swift 5.3, as an URL extension

    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
        }
    }
    
    0 讨论(0)
  • 2020-12-02 11:30

    In obj-C, warning to memory leaks when using 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;
    }
    
    0 讨论(0)
  • 2020-12-02 11:38

    If it did, your app surely wouldn't have permissions to even read it directly. What are you trying to do?

    EDIT

    This is a function I wrote a while ago. I wrote it for the Mac, but it looks like the same functions exist on the iPhone. Basically, you give it a filename, and it uses the path extension to return the file's MIME type:

    #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];
    }
    
    0 讨论(0)
提交回复
热议问题