如何在不基于扩展的 IOS 中获取 Mime 类型
Posted
技术标签:
【中文标题】如何在不基于扩展的 IOS 中获取 Mime 类型【英文标题】:How Can I get Mime Type in IOS which is not based on extension 【发布时间】:2012-04-05 18:20:48 【问题描述】:我们知道我们可以从文件的扩展名中获取文件的 MIME TYPE,但并不完全正确。例如,我们更改了文件的扩展名,我们会得到错误的 mime 类型。 我们也知道通过 C# 中的文件签名获取 mime 类型的方式,(使用 urlmon.dll Using .NET, how can you find the mime type of a file based on the file signature not the extension ,我的问题是我们如何在 ios 中获得确切的 mime 类型,无论文件的扩展名是否更改通过某人,我们可以获得正确的 mime 类型。
感谢您的关注~!
【问题讨论】:
iOS 上没有file signature
这样的概念。
感谢您的评论。您能告诉我在获得文件路径时如何准确地获得正确的 mime 类型。
【参考方案1】:
你能告诉我当我得到一个正确的 mime 类型 文件的路径。
iOS 使用Uniform Type Identifiers (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);
您应该考虑直接将 UTI 用于您的目的,而不是将它们转换为功能较弱的 mime 类型。
【讨论】:
它不会给出正确的 mimetype。它甚至没有检查实际文件。它只是将 扩展名转换为 mimetype @Johnnywho 这个答案是关于 从路径 获取 mime 类型(如明确说明并由 OP 在评论中要求)。 但带有标题的原始问题与扩展名不基于的mime类型有关。这样,您的回答具有误导性,我浪费了时间尝试您的代码。您应该明确声明路径必须具有扩展名。您的答案中没有一部分是这样说的。 我知道这是一个古老的讨论,但我刚刚通过谷歌找到了它,它很有帮助。请注意,您还需要:#import <MobileCoreServices/MobileCoreServices.h>
,并添加 MobileCoreServices 框架,使其工作。
@NikolaiRuhe 为什么不使用__bridge
而不是__bridge_retained
?如果您使用__bridge
,则不需要CFRelease(pathExtension)
。以上是关于如何在不基于扩展的 IOS 中获取 Mime 类型的主要内容,如果未能解决你的问题,请参考以下文章