1

在我当前的应用程序中,我从服务器下载了一些文件,并将它们存储在本地。

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

例子:

  1. 文件扩展名:mov、3gp、m4a 等,=> 显示在媒体播放器中。
  2. 文件扩展名:rtf、pptx、数字等,=>在UIWebView中显示。
  3. 文件扩展名:gif、png、xbm 等,=>在 UIImageView 中显示。

问题是:一些下载的文件可能没有任何扩展名。

我发现的一种方法是在 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. 除了检查文件扩展名,还有其他方法可以在适当的视图中显示文件吗?

请建议。

4

2 回答 2

0

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

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

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

于 2013-09-28T21:30:33.207 回答
0

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

于 2013-09-28T21:32:28.823 回答