2013-03-01 16 views
7

Ta metoda powinna być sprawdzana, czy plik ma typ MIME. Aby osiągnąć ten cel, używam metody probeContentType().
Może jednak jest inny sposób na podjęcie decyzji w tej samej kwestii. Jakie są inne alternatywy (jeśli takie istnieją)?Oszacuj, czy plik ma typ MIME

Kod:

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; 
    } 
} 

Pytanie:

  • Czy istnieją inne alternatywy, aby sprawdzić typ MIME w plikach?

Odpowiedz

4

Istnieją 2 sposoby na uzyskanie typ MIME pliku:

  1. Identyfikowanie przez plik na magic number - to niezawodne podejście ale wymaga odczytu informacji z pliku
  2. zgadywania przez rozszerzenie pliku - jest to szybki podejście, ale może być mniej dokładne

następujące rozwiązanie używać 1st podejście:

  1. Apache Tika - zestaw narzędzi do wykrywania i wydobywania metadanych i uporządkowaną zawartość tekstową z różnych dokumentów z wykorzystaniem istniejących bibliotek parsera
  2. JMimeMagic - biblioteki Java dla określania typu MIME plików lub strumieni
  3. mime-util - włącz programy Java w celu wykrycia typy MIME podstawie rozszerzeń plików, magicznych danych i treści wąchania

następujące rozwiązanie użyć 2nd podejście:

  1. javax.activation.MimetypesFileTypeMap - ta część struktury aktywacyjnej JavaBeans. MimetypesFileTypeMap wyszukuje w różnych miejscach w systemie użytkownika wpisy plików typów MIME.
  2. Korzystanie java.net.URL - mapowanie pomiędzy przedłużeniem a mime-type jest zdefiniowana w pliku [jre_home] /lib/content-types.properties

na trochę więcej informacji, zobacz ten post

+1

Czy możesz dodać kolejne warianty sprawdzające typy MIME (lista wyliczeniowa)? –

+0

Czy masz coś przeciwko mnie pytając, czy możesz zobaczyć na [to pytanie SO] (http://stackoverflow.com/questions/15325047/check-file-of-mime-type-with-jmimemagic). –

+0

Dzięki. Skończyło się na użyciu 'mime-util', działa świetnie nawet na pliku 9GB +. – Bob

1

Można użyć String mimeType = new MimetypesFileTypeMap().getContentType(theFile);.

Należy pamiętać, że jeśli nie zostanie znaleziony typ MIME, zostanie zwrócone application/octet-stream zamiast null.

+1

'getContentType (theFile)' => Czy możemy tam sprawdzić 'theFile.getAbsolutePath()'? A po naprawie - czy to jest poprawne ['check (File fileCheck)'] (http://pastebin.com/SpmFGZGf)? –

+1

public boolean check (File fileCheck) {\t String mimeType = new MimetypesFileTypeMap().getContentType (fileCheck); if (mimeType == null) {return false; } return true; \t} - Czy to prawda? –

+0

@nazar_art Nie, ponieważ, jak powiedziałem, jeśli nie zostanie znaleziony typ MIME, zwracane jest 'application/octet-stream' zamiast' null'. 'application/oktet-stream' jest zwykle domyślnym typem MIME dowolnego pliku, jeśli nie znaleziono innych, bardziej szczegółowych. – sp00m

0

Inną alternatywą jest użycie URLConnection.guessContentTypeFromName(String fileName) jeśli nie można użyć Java 7. pamiętać, że jeśli typ zawartości nie można domyślić, metoda zwróci null.