将MIME类型转换为文件扩展名。

5
如何在Xcode中将MIME类型转换为文件扩展名?例如,我有以下代码:
File Extension     MIME Type

aifc                audio/x-aiff
avi                 video/x-msvideo
gz                  application/x-gzip
jpg                 image/jpeg

Xcode

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
        NSString *mime      = [response MIMEType];
        NSString *extension = @"" // how to covert it ?!
}

我会创建一个字典并且通过关键字“mime”获取其对应的值: 例如:NSString *extension = [dictionary objectForKey: mime]; - Watsche
有没有不用创建字典的方法可以实现这个? - Fawaz
1
CFStringRef mimeType = (CFStringRef)@"audio/x-aiff"; CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL);CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension); - Watsche
如果您没有包括<MobileCoreServices/MobileCoreServices.h>或<CoreServices/CoreServices.h>,则ctrl + c将无法工作。 - Watsche
2个回答

6

包含<MobileCoreServices/MobileCoreServices.h><CoreServices/CoreServices.h>,然后只需按照以下代码:

CFStringRef mimeType = (CFStringRef)@"audio/x-aiff";
CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL);
CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);

我尝试通过添加Swift 4版本来编辑此内容,但被拒绝了。告诉我将其作为另一个答案。 - alegelos

5

Swift 4:

导入CoreServices

response.mimeType // is Optional<String> - some : "audio/mpeg"

获取 MP3 的方法如下:

guard let mime = response.mimeType,
      let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mime as CFString, nil),
      let ext = UTTypeCopyPreferredTagWithClass(uti.takeRetainedValue(), kUTTagClassFilenameExtension) else {
   return
}

ext.takeRetainedValue() // is "mp3"

注意,Xcode不会获取未知文件的扩展名,例如Storyboard或.cert,在这种情况下将在Guard返回中退出。


目前在Swift中,我需要import CoreServices - dwsolberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接