383 Stimmen

Wie erhält man den Medientyp (MIME-Typ) einer Datei?

Wie kann man mit Java einen Medientyp (MIME-Typ) aus einer Datei ermitteln? Bislang habe ich JMimeMagic und Mime-Util ausprobiert. Das erste gab mir Speicherausnahmen, das zweite schließt seine Streams nicht richtig.

Wie würden Sie die Datei untersuchen, um ihren tatsächlichen Typ zu bestimmen (nicht nur anhand der Erweiterung)?

4voto

Sathia Punkte 6348

Einfache und beste Option zum Abrufen des Mime-Typs des Inhalts aus dem Dateispeicherort.

Verwenden Sie diese Importe

import java.nio.file.Files;
import java.nio.file.Path;

Code

String type = Files.probeContentType(Path.of(imagePath));

4voto

madx Punkte 6169

Dies ist die einfachste Methode, die ich gefunden habe:

byte[] byteArray = ...
InputStream is = new BufferedInputStream(new ByteArrayInputStream(byteArray));
String mimeType = URLConnection.guessContentTypeFromStream(is);

4voto

ricardoc Punkte 131

Ich habe mehrere Möglichkeiten ausprobiert, darunter auch die ersten, die @Joshua Fox genannt hat. Aber einige erkennen häufige Mimetypen nicht, wie z. B. bei PDF-Dateien, und andere sind bei gefälschten Dateien nicht vertrauenswürdig (ich habe es mit einer RAR-Datei versucht, deren Erweiterung in TIF geändert wurde). Die Lösung, die ich gefunden habe, ist, wie auch von @Joshua Fox oberflächlich beschrieben, die Verwendung von MimeUtil2 etwa so:

MimeUtil2 mimeUtil = new MimeUtil2();
mimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
String mimeType = MimeUtil2.getMostSpecificMimeType(mimeUtil.getMimeTypes(file)).toString();

4voto

Pratik Gaurav Punkte 495

Apache Tika.

<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers -->
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.24</version>
</dependency>

und zwei Codezeilen.

Tika tika=new Tika();
tika.detect(inputStream);

Screenshot unten

enter image description here

4voto

Wenn Sie mit einem Servlet arbeiten und Ihnen der Servlet-Kontext zur Verfügung steht, können Sie :

getServletContext().getMimeType( fileName );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X