2013-09-28 218 views
1

在我目前的应用程序中,我从服务器上下载了几个文件,并将它们存储在本地。确定扩展名的文件没有扩展名

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

实施例:

  1. 文件扩展名:MOV,3GP,M4A等,=>在媒体播放器的显示。
  2. 文件扩展名:rtf,pptx,numbers等,=>在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. 代替检查文件扩展名,是否有任何其他方式来显示文件在适当的视图?

请建议。

+0

可能最容易使用'QLPreviewController'将所有文件。然后,您不需要处理文件扩展名和文件类型,并且用户可以获得所有文件的一致用户体验。 – rmaddy

回答

0

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

它是用C写的,所以根据特征价值是多少的话,你可能会在其整合

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

+0

Thnx :-)它也可以在iOS上使用吗? – Devarshi

+0

不知道,但我不知道它不会有任何理由。 –

+0

好..再次thnx :) – Devarshi

0

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