Java: Eine Weise zu entsprechen Mime (content) geben, um die Datei-Endung von CommonsMultipartFile
In meiner Firma, muss ich vergleichen, um den mime-Typ der Datei-Erweiterung für extra-Grund. Ich habe eine CommonsMultipartFile
. Ich versuche herauszufinden, der beste Weg, dies zu tun Vergleich. Ich habe gesehen, dass MimetypesFileTypeMap
, aber nicht sicher, ob das hier zu arbeiten. Ich versuche zu vermeiden (oder zu beschränken) jegliche Programmierung.
Bekomme ich die Werte wie folgt:
CommonsMultipartFile file = ...;
String fileName = file.getOriginalFilename();
String contentType = file.getContentType();
String extension = FilenameUtils.getExtension(fileName);
Ich Schätze jede Beratung und Hilfe auf diesem. Danke!
"Ich bin versuchen zu vermeiden (oder zu beschränken) jegliche Programmierung." - Ich versuchte auch 🙂
Wollen Sie einen MIME-Typ aus, eine Verlängerung oder eine Erweiterung von MIME-Typ?
Ich möchte nur sicherstellen, dass der mime-Typ und Dateiendung übereinstimmen. So ich egal in welcher Reihenfolge.
Wollen Sie einen MIME-Typ aus, eine Verlängerung oder eine Erweiterung von MIME-Typ?
Ich möchte nur sicherstellen, dass der mime-Typ und Dateiendung übereinstimmen. So ich egal in welcher Reihenfolge.
InformationsquelleAutor Ascalonian | 2014-12-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java-Bibliothek für diesen Fall ist sehr begrenzt (Anzahl der Arten). Dies ist, wie ich es mache:
Schritt 2 beinhaltet eine statische anzeigen:
funktioniert gut für mich, hoffe, das hilft!
möglicherweise möchten Sie auch zu schauen, Apache Tika. Für mich war es nicht eine option, aber es ist weniger hart-Codierung
Ich war einfach nicht sicher, ob es eine Java-Bibliothek, bewahrte alle diese bereits statt, um das setup eine Karte selbst. Aber zum Glück habe ich nur sorgen zu machen, über ein paar von Ihnen 🙂
Sind Sie sicher, dass jede Erweiterung kann nur einen Inhaltstyp? Ich denke, xls und xlsx haben mehrere
Nein, ich bin sicher, dass jede extension kann mehrere mime-Typen. Aber es spielt keine Rolle, Sie schreiben eine Anwendung, und Sie entscheiden, wie Sie damit umgehen wollen jede Erweiterung.
InformationsquelleAutor Lucas
Die zuverlässigste Methode ist die Verwendung - Dateien.probeContentType, aber das erfordert eine tatsächliche Datei, teilweise, weil nicht alle Betriebssysteme verlassen sich auf die Erweiterung um die Datei zu bestimmen Art.
In Linux, ist die nächste beste Ansatz ist
new MimetypesFileTypeMap("/etc/mime.types")
, das wirklich basierend auf dem system die Zuordnungen. Ich weiß nicht, ob OS X hat einemime.types
- Datei (obwohl Sie eine Suche zeigt, dass TASSEN für OS X nutzt eine solche Datei mit einem erweiterten, aber meist abwärtskompatibler syntax).Soweit ich weiß, gibt es keine integrierte Java-Klasse für die erste MIME-Typ↔extension mappings in Windows.
URLConnection.getFileNameMap()
gibt eine FileNameMap, dass hat eine anständige Zahl von Einträgen, aber immer noch nicht, basiert auf dem system die Zuordnungen. Auf meinem Linux-system, zum Beispiel, gibt Sie null zurück .bz2-und .rpm-Dateien.FileTypeMap.getDefaultFileTypeMap()
zu haben scheint, ein paar Einträge, aber es ist auch klar, das nicht basiert auf das system der Zuordnungen. Zumindest auf meinem system, gibt es "application/octet-stream".png-Dateien.Ich denke, die einfachste Sache zu tun ist Kapseln alle in einer Klasse:
Dass Sie ziemlich gute Ergebnisse. Wenn Sie möchten, echte Plattform-basierten MIME-Typ-überprüfung in Windows, ich weiß nur einen Weg, dies zu tun ist, das registry zu Lesen:
InformationsquelleAutor VGR
Habe ich eine Klasse https://github.com/nablex/utils-io/blob/master/src/main/java/be/nabu/utils/io/ContentTypeMap.java, das dies tut.
Fügt es ein paar Dinge, die fehlen in der URLConnection Sachen:
Zusätzlich kann es eingesteckt werden in die URLConnection mit:
Standardmäßig verwendet es eine Datei zum laden der Zuordnungen: https://github.com/nablex/utils-io/blob/master/src/main/resources/mime.properties
In diesem Fall alles ist irgendwann hart codiert.
InformationsquelleAutor nablex