识别没有扩展名的文件的扩展名

时间:2013-09-28 21:19:39

标签: cocoa-touch nsdata

在我目前的应用程序中,我从服务器下载了几个文件,并在本地存储它们。

根据文件的扩展名,我在适当的视图中加载文件。

示例:

  1. 文件扩展名:mov,3gp,m4a等,=>在媒体播放器中显示。
  2. 文件扩展名:rtf,pptx,数字等,=>在UIWebView中显示。
  3. 文件扩展名:gif,png,xbm等,=>在UIImageView中显示。
  4. 问题是:某些下载的文件可能没有任何扩展名。

    我发现一种方法是在connectionDidFinishLoading中从响应中获取MIMEType并从中获取文件扩展名。我使用下面的代码,相同:

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection{
        CFStringRef mimeType = (__bridge CFStringRef)[_respo MIMEType];
        CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, mimeType, NULL);
        CFStringRef extension = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension);
        NSString *fileName = [NSString stringWithFormat:@"%@.%@", [[_respo suggestedFilename] stringByDeletingPathExtension], (__bridge NSString *)extension];
        [[NSFileManager defaultManager] createFileAtPath:[[self docsDir] stringByAppendingPathComponent:[NSString stringWithFormat:@"Downloads/%@", fileName]] contents:_downloadedData attributes:nil];
    }
    

    现在我的问题是:

    1. 有没有其他方法可以识别没有扩展名的文件的文件扩展名,比如来自NSData对象?

    2. 除了检查文件扩展名外,还有其他方法可以在适当的视图中显示文件吗?

    3. 请建议。

2 个答案:

答案 0 :(得分:0)

一种常见的非Objective-C方法是使用file命令,该命令查找文件的“魔术”部分以确定/猜测/估计它的mime类型。

它是用C语言编写的,因此根据功能对您的价值而言,您可以将其集成到其中。

来源:http://darwinsys.com/file/ 手册页:http://www.openbsd.org/cgi-bin/man.cgi?query=file&apropos=0&sektion=1

答案 1 :(得分:0)

作为一种不同的方法 - 您是否可以简单地查看用于下载的连接的Content-type标头?如果服务器知道mime类型,那似乎是一个很好的解决方案。 (如果服务器不知道mime类型但您可以控制它,请尝试安装:http://httpd.apache.org/docs/2.2/mod/mod_mime_magic.html或等效的。)