2016-07-20 13 views
1

私はこの今日につまずい:MIMEタイプのファイル拡張子は大文字ですか?

String fileName = "test.JPG"; 
servletContext.getMimeType(fileName); // null 

明白な修正:

servletContext.getMimeType(fileName.toLowerCase()); // image/jpeg  

は、私は右のMIMEタイプを検出した場合、ファイル拡張子レターケースについては気にしないのだろうか?

答えて

1

あなたはすでにこの問題が発生している理由を説明します。

あなたはTomcatのを使用している場合は、MIMEタイプを検出したときにケースについてを気にする必要があります

なぜですか?

TomcatはmimeMapingsと呼ばれるHashMapにmimeTypesを格納しています。

HashMapのキーでは大文字と小文字が区別されます。コードブロックの下

あなたがたjava.util.HashMap内のキーは大文字と小文字が区別されます知っているorg.apache.catalina.core.StandardContext

private HashMap<String, String> mimeMappings = 
434   new HashMap<String, String>(); 

から取られています。つまり、「abc」と「ABC」の両方を同じマップにキーとして保持することができます。

この例を参照してください。

public static void main(String[] args) { 

    Map<String, String> map = new HashMap<String, String>(); 
    map.put("abc", "abc"); 
    map.put("xyz", "xyz"); 
    map.put("ABC", "ABC"); 

    System.out.println(map); 
} 
Output 
{ABC=ABC, abc=abc, xyz=xyz} 

情報:だからこそ場合に敏感なマップのApache Commonsのexistsです。

+0

それは問題ではありませんが、Tomcatの実装のために重要です。私は私の '.toLowerCase()'の修正に固執します。 – ForguesR

関連する問題