Supongamos que tengo una ruta completa de archivo como: (/ sdcard / tlogo.png). Quiero saber su tipo mimo.
Creé una función para ello
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;
}
pero cuando lo llamo, devuelve nulo.
File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);
android
filesystems
mime-types
Sushant Bhatnagar
fuente
fuente
ID3
en el comienzo de su texto para meterse contigo aún más.*/*
?Detecta el tipo mime de cualquier archivo
fuente
toLowerCase()
Hizo el truco.apostrophe
! P.ej. nombre de archivo =Don't go baby.mp3
. ElPatternMatcher
interiorMimeTypeMap.getFileExtensionFromUrl()
no puede manejar el nombre del archivo y devuelve una cadena vacía; ¡null resulta ser la cadena mimetype!I. Shvedenenko
Worked para los problemas que he señalado anteriormente. Pero esta respuesta fue un puntero en la dirección correcta.file://
ocontent://
.La solución MimeTypeMap anterior devuelve nulo en mi uso. Esto funciona y es más fácil:
fuente
Versión optimizada de la respuesta de Jens con seguridad nula y tipo de respaldo.
Actualización (19.03.2018)
Bonificación: los métodos anteriores como una función de extensión de Kotlin menos detallada :
fuente
toLoverCase
.fuente
Preste mucha atención a la solución anterior de umerk44 . invoca y es CASO SENSIBLE. Pasé una tarde en esto y luego eché un vistazo más de cerca: volveré si lo pasas "JPG", mientras que devolverá "image / jpeg" si lo pasas "jpg".
getMimeTypeFromExtension
guessMimeTypeTypeFromExtension
getMimeTypeFromExtension
NULL
fuente
Aquí está la solución que utilicé en mi aplicación de Android:
fuente
A veces las respuestas de Jeb y Jens no funcionan y devuelven nulas. En este caso, uso la solución Follow. El encabezado del archivo generalmente contiene firma de tipo. Lo leí y lo comparé con las conocidas en la lista de firmas .
signatureId
es un índice de firma en un conjunto de firmas. Por ejemplo,Ahora tengo el tipo de archivo incluso si el URI del archivo no lo tiene. A continuación obtengo el tipo mime por tipo de archivo. Si no sabe qué tipo de mimo obtener, puede encontrar el adecuado en esta tabla .
Funciona para muchos tipos de archivos. Pero para el video no funciona, porque necesita un códec de video conocido para obtener un tipo mime. Para obtener el tipo mime de video, uso MediaMetadataRetriever .
fuente
Traté de usar métodos estándar para determinar el tipo mime, pero no puedo retener la extensión de archivo usando
MimeTypeMap.getFileExtensionFromUrl(uri.getPath())
. Este método me devolvió una cadena vacía. Así que hice una solución no trivial para retener la extensión del archivo.Aquí está el método que devuelve la extensión del archivo:
Y habiendo conservado la extensión del archivo, es posible obtener el tipo mime como se muestra a continuación:
fuente
MimeTypeMap.getFileExtensionFromUrl
devolvió una cadena vacía para los nombres de archivo que tienen caracteres no válidos según la implementación interna de aPatternMatcher
. ¡Esto funcionó para mí por completo! Me encantó, no hay problemas hasta ahora!String extension = file.getName().split("\\.")[1]
también habría funcionado, eliminando así el método getExtension ().MimeTypeMap
Es posible que no reconozca algunas extensiones de archivo como flv, mpeg, 3gpp, cpp. Por lo tanto, debe pensar cómo expandir MimeTypeMap para mantener su código. Aquí hay tal ejemplo.http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils
Además, aquí hay una lista completa de tipos de mimos
http: //www.sitepoint.com/web-foundations/mime-types-complete-list/
fuente
Para Xamarin Android (De la respuesta de @ HoaLe arriba)
fuente
fuente
fuente
fuente
Me enfrenté a un problema similar. Hasta ahora sé que el resultado puede ser diferente para diferentes nombres, así que finalmente llegué a esta solución.
fuente
La solución anterior devolvió un valor nulo en el caso de un archivo .rar, utilizando URLConnection.guessContentTypeFromName (url) funcionó en este caso.
fuente
mimo del archivo local:
fuente
tiene varias opciones para obtener la extensión del archivo: como: 1-
String filename = uri.getLastPathSegment();
vea este enlace2-puedes usar este código también
pero esto no es bueno 3-si tiene URI de archivo, entonces use este Código
4-si tienes URL entonces usa este código:
disfruta tu código :)
fuente
fuente
fuente
También ha devuelto un valor nulo en mi ruta de caso fue
como trabajo alrededor del uso
así se ve el método
Como resultado, devuelve el resultado de éxito:
Espero que ayude a alguien
fuente
Ninguna de las respuestas aquí son perfectas. Aquí hay una respuesta que combina los mejores elementos de todas las respuestas principales:
fuente
fuente
Considero que la forma más fácil es consultar este archivo de recursos: https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/net/android.mime.types
fuente
No sé por qué
MimeTypeMap.getFileExtensionFromUrl()
tiene problemas conspace
sy algunos otros caracteres, eso regresa""
, pero acabo de escribir este método para cambiar el nombre del archivo a uno admitible. Es solo jugar conString
s. Sin embargo, funciona un poco. A través del método, losspace
s existentes en el nombre del archivo se convierten en un carácter deseable (que, aquí, es "x")replaceAll(" ", "x")
y otros caracteres no adecuados se convierten en uno adecuadoURLEncoder
. Por lo tanto, el uso (de acuerdo con los códigos presentados en la pregunta y la respuesta seleccionada) debería ser similargetMimeType(reviseUrl(url))
.fuente