如何在IOS中获取不基于扩展名的Mime类型

Ham*_*asN 11 stream ios mime-types

我们知道我们可以从文件的扩展名中获取文件的MIME TYPE,但它并不完全正确.例如,我们更改了文件的扩展名,我们将得到错误的mime类型.而且我们也知道通过C#中的文件签名获取mime类型的方式,(使用urlmon.dll 使用.NET,如何根据文件签名而不是扩展名找到文件的mime类型,我的问题是我们怎样才能在IOS中获得精确的mime类型,无论文件的扩展名被某人更改,我们都可以获得正确的mime类型.

谢谢你的关注〜!

Nik*_*uhe 27

你能告诉我当我得到一个文件的路径时,我是如何得到正确的mime类型的.

iOS使用统一类型标识符(UTI)的概念来处理文档类型.

NSString *path; // contains the file path

// Get the UTI from the file's extension:

CFStringRef pathExtension = (__bridge_retained CFStringRef)[path pathExtension];
CFStringRef type = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, NULL);
CFRelease(pathExtension);

// The UTI can be converted to a mime type:

NSString *mimeType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass(type, kUTTagClassMIMEType);
if (type != NULL)
    CFRelease(type);
Run Code Online (Sandbox Code Playgroud)

您应该考虑直接使用UTI而不是将它们转换为功能较弱的mime类型.

  • 我知道这是一个古老的讨论,但我刚刚通过Google遇到过它,这很有帮助.请注意,您还需要:`#import <MobileCoreServices/MobileCoreServices.h>`,并添加MobileCoreServices框架,以使其工作. (6认同)
  • 但其标题的原始问题是关于延伸的mime类型**不基于**.这样,你的回答是误导性的,我浪费了我的时间来尝试你的代码.您应该明确声明该路径必须具有扩展名.你的答案中没有一部分是这么说的. (4认同)
  • 它不会给出正确的mimetype.它甚至不检查实际文件.它只是将**扩展名翻译为mimetype** (2认同)