2013-09-28 256 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或同等產品。)