Предположим, у меня есть полный путь к файлу, например: (/ sdcard / tlogo.png). Я хочу знать его тип пантомимы.
Я создал для него функцию
public static String getMimeType(File file, Context context)
{
Uri uri = Uri.fromFile(file);
ContentResolver cR = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(uri));
return type;
}
но когда я это называю, он возвращает ноль.
File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);
android
filesystems
mime-types
Сушант Бхатнагар
источник
источник
ID3
в начало его текста, чтобы связываться с вами еще больше.*/*
?Определить MIME-тип любого файла
источник
toLowerCase()
сделал свое дело.apostrophe
! Например. имя файла =Don't go baby.mp3
.PatternMatcher
ВнутриMimeTypeMap.getFileExtensionFromUrl()
не может обрабатывать имя файла и возвращает пустую строку; NULL становится строкой Mimetype!I. Shvedenenko
Worked для указанных выше проблем. Но этот ответ был указателем в правильном направлении.file://
илиcontent://
.Решение MimeTypeMap выше вернуло ноль в моем использовании. Это работает, и это проще:
источник
Оптимизированная версия Йенса answere с нуль-безопасности и запасном типа.
Обновление (19.03.2018)
Бонус: вышеперечисленные методы как менее многословная функция расширения Kotlin :
источник
toLoverCase
части.источник
Обратите супер пристальное внимание umerk44 «ы решения выше.
getMimeTypeFromExtension
вызываетguessMimeTypeTypeFromExtension
и чувствителен к случаю. Я потратил полдня на это, затем присмотрелся -getMimeTypeFromExtension
вернусь,NULL
если вы передадите ему «JPG», тогда как он вернет «image / jpeg», если вы передадите ему «jpg».источник
Вот решение, которое я использовал в своем приложении для Android:
источник
Иногда ответы Джеба и Дженса не работают и возвращают ноль. В этом случае я использую следующее решение. Заголовок файла обычно содержит тип подписи. Я читаю и сравниваю с известными в списке подписей .
signatureId
индекс подписи в массиве подписей. Например,Теперь у меня есть тип файла, даже если URI файла нет. Затем я получаю MIME тип по типу файла. Если вы не знаете, какой тип пантомимы получить, вы можете найти нужную в этой таблице .
Это работает для многих типов файлов. Но для видео это не работает, потому что вам нужен известный видеокодек, чтобы получить тип MIME. Чтобы получить тип MIME видео, я использую MediaMetadataRetriever .
источник
Я пытался использовать стандартные методы для определения типа MIME, но я не могу сохранить расширение файла с помощью
MimeTypeMap.getFileExtensionFromUrl(uri.getPath())
. Этот метод вернул мне пустую строку. Поэтому я принял нетривиальное решение, чтобы сохранить расширение файла.Вот метод, возвращающий расширение файла:
А сохранив расширение файла, можно получить тип mime, как показано ниже:
источник
MimeTypeMap.getFileExtensionFromUrl
вернула пустую строку для имен файлов, которые имеют недопустимые символы в соответствии с внутренней реализацией aPatternMatcher
. Это сработало для меня полностью! Понравилось, пока никаких проблем!String extension = file.getName().split("\\.")[1]
тоже бы сработал, исключив таким образом метод getExtension ().MimeTypeMap
может не распознавать некоторые расширения файлов, такие как flv, mpeg, 3gpp, cpp. Поэтому вам нужно подумать, как расширить MimeTypeMap для поддержки вашего кода. Вот такой пример.http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils
Плюс, вот полный список типов пантомимы
http: //www.sitepoint.com/web-foundations/mime-types-complete-list/
источник
Для Xamarin Android (ответ @ HoaLe выше)
источник
источник
источник
источник
Я столкнулся с подобной проблемой. До сих пор я знаю, что результат может отличаться для разных имен, поэтому, наконец, пришел к этому решению.
источник
Вышеупомянутое решение возвратило нуль в случае файла .rar, используя URLConnection.guessContentTypeFromName (url), работал в этом случае.
источник
MIME из локального файла:
источник
у вас есть несколько вариантов, чтобы получить расширение файла: как: 1 -
String filename = uri.getLastPathSegment();
см. эту ссылку2-вы также можете использовать этот код
но это не хороший апроч. 3 - если у вас есть URI файла, используйте этот код
4-если у вас есть URL, используйте этот код:
наслаждайтесь вашим кодом :)
источник
источник
источник
Также вернул нулевое значение в моем случае путь был
как обойти использование
так выглядит метод
в результате он возвращает результат успеха:
Надеюсь, это кому-нибудь поможет
источник
Ни один из ответов здесь не идеален. Вот ответ, объединяющий лучшие элементы всех лучших ответов:
источник
источник
Я считаю, что самый простой способ - обратиться к этому файлу ресурса: https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/net/android.mime.types.
источник
Я не понимаю, почему
MimeTypeMap.getFileExtensionFromUrl()
возникают проблемы сspace
s и некоторыми другими символами, которые возвращаются""
, но я просто написал этот метод, чтобы изменить имя файла на допустимое. Это просто игра сString
с. Тем не менее, это отчасти работает. Посредством методаspace
s, существующие в имени файла, преобразуются в желательный символ (который здесь «x»),replaceAll(" ", "x")
а другие неподходящие символы - в подходящийURLEncoder
. поэтому использование (согласно кодам, представленным в вопросе и выбранному ответу) должно быть примерно такимgetMimeType(reviseUrl(url))
.источник