ContentType : 指內容型別,一般指網頁中的ContentType,用於定義網路檔案的型別和網頁的編碼,決定瀏覽器將以什麼形式,什麼編碼讀取檔案。
副檔名(Extension):副檔名是作業系統用來標示檔案格式的一種機制。
通常情況下通過副檔名就能大致的推斷出檔案的內容型別,不過這不是絕對的,因為副檔名通常可以人為設定而不會影響到檔案的內容型別。
我們可以檢視Http ContentType與副檔名對照表瞭解相關對照,還可以瞭解一下 MIME(Multipurpose Internet Mail Extensions)多用途網際網路郵件副檔名。
Web開發中經常與ContentType打交道,瞭解Tomcat Web容器的話可以在其conf/web.xml檢視MIME的對映資訊,比如:
<mime-mapping> <extension>png</extension> <mime-type>p_w_picpath/png</mime-type> </mime-mapping>
另外可以檢視開源中國提供的Http ContentType 對照表:http://tool.oschina.net/commons
下面說說在開發中遇到的一個問題:
通常情況下我們是通過解析一個檔案來獲取它的ContentType, 而當Http請求獲取檔案,從得到的響應資訊中獲取到ContentType值之後,該以什麼樣的檔案型別保持資料呢?這個時候就得用到ContentType對映Extension。
有一個實際案例,我在使用七牛雲端儲存的時候,上傳一個檔案(“app.png”), 根據上傳規則,我需要設定一個key(也就是雲端儲存中的檔名),如果key是一個不帶擴充套件的名的檔名,那麼我在應用程式中做一次請求(http://secondriver-dev.qiniudn.com/1399965230092)的時候,該以什麼樣的副檔名來儲存這個檔案,當然即使儲存檔案不設定副檔名,對於檔案的內容沒有影響,只是在開啟檔案的時候需要選擇開啟檔案的應用程式。
下面將開源中國提供的Http ContentType對照表提取出來,做成Java類。
參見附件: MIME檔案,Extension與ContentType(使用時去掉 .txt字尾)。
下面是通過PHP指令碼解析MIME,來提取其中的Extension=ContentType對。
<?php $file=`MIME.txt`; $resource=fopen($file, `r`); $i=0; $extension_array=[]; $contenttype_array=[]; $map=[]; while(false!=($string=fgets($resource))){ $array=explode(" ", $string); $result=validate_array($array); if(!$result){ echo `存在不合格的字串`; }else{ $e1=trim($array[0]); $c1=trim($array[1]); $e2=trim($array[2]); $c2=trim($array[3]); $map[$e1]=$c1; $map[$e2]=$c2; $extension_array[$i]=$e1; $contenttype_array[$i]=$c2; $extension_array[$i+1]=$e2; $contenttype_array[$i+1]=$c2; } $i=$i+2; } var_dump($map); echo "<hr/>"; print_array($extension_array); echo "<hr/>"; print_array($contenttype_array); function print_array($array){ for($i=0, $length=sizeof($array); $i<$length; $i++){ echo `"`.$array[$i].`"`; if($i != $length-1){ echo ", "; } } } function validate_array($array){ if(sizeof($array)!=4){ return false; }else{ foreach ($array as $key => $value) { if($value === " "){ return false; } } return true; } } echo `<h1>一共`.$i.`條對映</h1>`; fclose($resource); ?>
通過上面PHP程式碼解析MIME檔案,就可以根據具體需要來使用Extension與ContentType對映。