# MIME Type ermitteln und in Servlet setzen



## deamon (27. Jul 2009)

Der ServletContext bietet die Methode getMimeType(zusendendeDatei), die anhand der Dateiendung den MIME Type ermittelt. Die ist jedoch nicht besonders hilfreich, wenn die Datei dynamisch erzeugt wird. Man könnte den MIME Type bei jeder Response von Hand setzen. Ich suche einen Weg, wie man das automatisieren kann. 

Bei Spring MVC kann man den MIME Type für alle Vorlagendaten (z. B. FreeMarker-Templates) global auf etwa "text/html" setzen. Aber so ein Template könnte ja genauso gut eine Textdatei, ein XML-Dokument, JSON oder sonst irgendwas sein. Wie könnte man den MIME-Type automatisch ermitteln? 

Ich habe drei Ideen, wie man das machen könnte:
* Der Endung der Template-Datei, wie ".ftl" für "FreeMarker Template", wird noch der eigentliche Typ vorangestellt. Also etwa "datei.text.ftl" und "datei.html.ftl".  
* Verzeichnisnamen wie "txt/datei.ftl" und "html/datei.ftl"
* Speicherung des MIME-Typen in einer extra Datei wie "datei.mime", die enthielte dann z. B. "text/html".

Wenn aus dem Template die fertige Datei erzeugt wird, würde jeweils der MIME-Type aus dem Dateinamen bzw. der separaten Datei ermittelt.

Fällt euch noch was besseres ein?


----------



## Noctarius (27. Jul 2009)

Java Mime Magic Library | Get Java Mime Magic Library at SourceForge.net Vielleicht hilft dir das weiter.


----------



## maki (27. Jul 2009)

Vielleciht reicht auch MimetypesFileTypeMap.


----------



## deamon (27. Jul 2009)

Vielen Dank für eure Vorschläge. Sie zeigen mir, dass meine Ideen nicht völlig abwegig waren und helfen mir vielleicht bei der konkreten Lösung.


----------



## maki (27. Jul 2009)

Hab das damals so gemacht:


```
...
		response.setContentType(getContentType(file));
...

	private static String getContentType(java.io.File file) {
		MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();

		String contentType = mimeTypesMap.getContentType(file);

		return contentType;
	}
```


----------

