在我目前的应用程序中,我从服务器下载了几个文件,并在本地存储它们。
根据文件的扩展名,我在适当的视图中加载文件。
示例:
问题是:某些下载的文件可能没有任何扩展名。
我发现一种方法是在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];
}
现在我的问题是:
有没有其他方法可以识别没有扩展名的文件的文件扩展名,比如来自NSData对象?
除了检查文件扩展名外,还有其他方法可以在适当的视图中显示文件吗?
请建议。
答案 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或等效的。)