2012-03-21 45 views
11

我們知道我們可以從文件的擴展名中獲取文件的MIME類型,但它不完全是。例如,我們更改了文件的擴展名,並且我們會得到錯誤的MIME類型。 而且我們知道在C#中通過文件簽名獲取MIME類型的方式(使用urlmon.dll Using .NET, how can you find the mime type of a file based on the file signature not the extension,我的問題是我們如何才能在IOS中獲得確切的MIME類型,而不管文件的擴展名是由一個人,我們可以getthe正確的MIME類型。如何獲得Mime輸入不是基於擴展名的IOS

感謝您的關注〜!

+0

在iOS上沒有像'file signature'這樣的概念。 – 2012-03-21 09:04:54

+0

謝謝你的評論。你能否告訴我,當我得到一個文件的路徑時,我是如何得到正確的mime類型的。 – HamasN 2012-03-21 09:30:00

回答

27

你能告訴我如何得到正確的MIME類型什麼時候我得到一個文件的 路徑。

iOS使用Uniform Type Identifiers(UTI)的概念來處理dle文檔類型。

NSString *path; // contains the file path 

// Get the UTI from the file's extension: 

CFStringRef pathExtension = (__bridge_retained CFStringRef)[path pathExtension]; 
CFStringRef type = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, NULL); 
CFRelease(pathExtension); 

// The UTI can be converted to a mime type: 

NSString *mimeType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass(type, kUTTagClassMIMEType); 
if (type != NULL) 
    CFRelease(type); 

您應該考慮直接使用UTI來達到您的目的,而不是將它們轉換爲功能較弱的MIME類型。

+2

它不會給出正確的mimetype。它甚至不檢查實際文件。它只是將**擴展名轉換爲mimetype ** – Johnnywho 2013-01-21 13:30:52

+1

@Johnnywho這個答案是關於從路徑獲取mime類型**(正如明確指出的那樣,並且在OP中請求評論)。 – 2013-01-21 13:40:08

+4

但其標題的原始問題認爲mime類型**不基於擴展名。那樣,你的回答就會讓人產生誤解,並且浪費了我的時間去嘗試你的代碼。你應該明確說明路徑必須有一個擴展。沒有一部分答案是這樣說的。 – Johnnywho 2013-01-22 10:32:14

相關問題