2013-03-01 3 views
7

Diese Methode sollte überprüfen, ob eine Datei MIME-Typ ist. Um dieses Ziel zu erreichen, verwende ich die Methode probeContentType().
Aber vielleicht ist eine andere Möglichkeit, die gleiche Frage zu entscheiden. Welche sind die anderen Alternativen (wenn es welche gibt)?Schätzung, ob die Datei MIME-Typ ist

Code:

class ProbeContentTypeCheker implements Checker { 

    @Override 
    public boolean check(File fileCheck) { 
     try { 
      Path filePath = FileSystems.getDefault().getPath(
        fileCheck.getAbsolutePath()); 
      if ((Files.probeContentType(filePath) != null)) { 
       return true; 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 
} 

Frage:

  • Gibt es andere Alternativen MIME-Typ in Dateien zu überprüfen?

Antwort

4

Es gibt zwei Ansätze für eine Datei MIME-Typen bekommen:

  1. durch die magic number der Datei identifizieren - dies ist ein zuverlässiger Ansatz, aber es erfordert Informationen aus der Datei zu lesen
  2. es durch die Erweiterungsdatei Erraten - dies ist eine schnelle Annäherung, kann aber weniger genau

die folgende Lösung, die die erste Methode verwenden:

  1. Apache Tika - ein Toolkit zur Erfassung und Metadaten und strukturierte Textinhalte aus verschiedenen Dokumenten zu extrahieren mit vorhandenen Parser-Bibliotheken
  2. JMimeMagic - eine Java-Bibliothek für den MIME-Typen der Dateien zu bestimmen oder Streams
  3. mime-util - Java-Programme ermöglichen zu erkennen MIME-Typ auf Basis von Dateierweiterungen, Magie Daten und Inhalten

die folgende Lösung verwenden, um den zweiten Ansatz schnüffeln:

  1. javax.activation.MimetypesFileTypeMap - dieser Teil des JavaBeans Activation Framework. Die MimetypesFileTypeMap sucht an verschiedenen Stellen im System des Benutzers nach MIME-Typen-Dateieinträgen.
  2. Mit java.net.URL - Zuordnung zwischen der Verlängerung und dem MIME-Typ ist in der Datei definiert [JRE_HOME] /lib/content-types.properties

Für einige weitere Informationen siehe diese post

+1

Können Sie weitere Varianten hinzufügen, die MIME-Typen prüfen (Liste auflisten)? –

+0

Stört es mich fragen, wenn Sie auf [diese SO Frage] (http://stackoverflow.com/questions/15325047/check-file-of-mime-type-with-jmimemagic) sehen können. –

+0

Danke. Am Ende habe ich 'mime-util' verwendet, es funktioniert sogar auf einer 9GB + Datei. – Bob

1

Sie können verwenden. Wenn kein MIME-Typ gefunden wird, wird application/octet-stream anstelle von null zurückgegeben.

+1

'getContentType (theFile)' => Können wir dort 'theFile.getAbsolutePath()'? Und nach behoben - ist dies gültig ['check (File dateiCheck)'] (http://pastebin.com/SpmFGZGf)? –

+1

Öffentliche boolesche Überprüfung (File dateiCheck) {\t String mimeType = new MimetypesFileTypeMap().getContentType (Dateiprüfung); if (mimeType == null) {return false; } true zurückgeben; \t} - Ist das korrekt? –

+0

@nazar_art Nein, da, wie gesagt, wenn kein MIME-Typ gefunden wird, 'application/octet-stream' statt 'null' zurückgegeben wird. 'application/octet-stream' ist normalerweise der Standard-MIME-Typ einer Datei, wenn kein anderer spezifischer gefunden wurde. – sp00m

0

Eine weitere Alternative ist URLConnection.guessContentTypeFromName(String fileName) zu verwenden, wenn Sie nicht Java 7. verwenden können Hinweis, dass, wenn der Inhaltstyp nicht erraten werden kann, wobei das Verfahren null zurückkehren wird.

Verwandte Themen