Лучший способ определить тип mime файла в java?
Любопытно, что лучший способ в Java получить mime-тип файла. Он должен фактически проверять файл, потому что имена файлов не являются точным индикатором.
В настоящее время я использую следующее, которое кажется очень пораженным или пропущенным
is = new BufferedInputStream(new FileInputStream(fileName));
String mimeType = URLConnection.guessContentTypeFromStream(is);
if(mimeType == null) {
throw new IOException("can't get mime type of image");
}
Ответы
Ответ 1
URLConnection#guessContentTypeFromStream()
или ...FromName()
является действительно лучшее, что вы можете получить в стандартном Java SE API. Однако существуют сторонние библиотеки, такие как jMimeMagic, который работает лучше, чем URLConnection#guessXXX()
.
String mimeType = Magic.getMagicMatch(file, false).getMimeType();
Это поддерживает более широкий диапазон типов mime.
Ответ 2
В следующей ссылке есть хорошее сравнение различных способов получения типа Mime файла (в него входят такие библиотеки, как Apache Tika, JMimeMagic и т.д. с некоторым собственным кодом):
http://www.rgagnon.com/javadetails/java-0487.html
Ответ 3
public static String getContentType(String filename)
{
String g = URLConnection.guessContentTypeFromName(filename);
if( g == null)
{
g = MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(filename);
}
return g;
}