Supposons que j'ai un chemin complet de fichier comme: (/ sdcard / tlogo.png). Je veux connaître son type de mime.
J'ai créé une fonction pour cela
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;
}
mais quand je l'appelle, il renvoie null.
File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);
android
filesystems
mime-types
Sushant Bhatnagar
la source
la source
ID3
dans le début de son texte pour vous embêter encore plus.*/*
t-elle?Détecter le type mime de n'importe quel fichier
la source
toLowerCase()
a fait l'affaire.apostrophe
! Par exemple. nom de fichier =Don't go baby.mp3
. L'PatternMatcher
intérieurMimeTypeMap.getFileExtensionFromUrl()
ne peut pas gérer le nom du fichier et renvoie une chaîne vide; null est la chaîne de type mime!I. Shvedenenko
Worked pour les problèmes que j'ai signalés ci-dessus. Mais cette réponse était un indicateur dans la bonne direction.file://
oucontent://
.La solution MimeTypeMap ci-dessus a renvoyé null dans mon utilisation. Cela fonctionne et est plus simple:
la source
Version optimisée de la réponse de Jens avec null-safety et fallback-type.
Mise à jour (19.03.2018)
Bonus: les méthodes ci-dessus sont une fonction d'extension Kotlin moins verbeuse :
la source
toLoverCase
partie nulles .la source
Faites super attention à umerk44 l » solution ci - dessus.
getMimeTypeFromExtension
invoqueguessMimeTypeTypeFromExtension
et est SENSIBLE AU CAS. J'ai passé un après-midi là-dessus, puis j'ai examiné de plus près -getMimeTypeFromExtension
je reviendraiNULL
si vous le passez "JPG" alors qu'il retournera "image / jpeg" si vous le passez "jpg".la source
Voici la solution que j'ai utilisée dans mon application Android:
la source
Parfois, les réponses de Jeb et Jens ne fonctionnent pas et renvoient null. Dans ce cas, j'utilise la solution suivante. L'en-tête de fichier contient généralement une signature de type. Je l'ai lu et comparé avec connu dans la liste des signatures .
signatureId
est un index de signature dans un tableau de signatures. Par exemple,Maintenant, j'ai le type de fichier même si l'URI du fichier ne l'a pas. Ensuite, j'obtiens le type de mime par type de fichier. Si vous ne savez pas quel type de mime obtenir, vous pouvez le trouver dans ce tableau .
Cela fonctionne pour de nombreux types de fichiers. Mais pour la vidéo, cela ne fonctionne pas, car vous avez besoin d'un codec vidéo connu pour obtenir un type mime. Pour obtenir le type mime de la vidéo, j'utilise MediaMetadataRetriever .
la source
J'ai essayé d'utiliser des méthodes standard pour déterminer le type mime, mais je ne peux pas conserver l'extension de fichier en utilisant
MimeTypeMap.getFileExtensionFromUrl(uri.getPath())
. Cette méthode m'a renvoyé une chaîne vide. J'ai donc fait une solution non triviale pour conserver l'extension de fichier.Voici la méthode renvoyant l'extension de fichier:
Et après avoir conservé l'extension de fichier, il est possible d'obtenir le type mime comme ci-dessous:
la source
MimeTypeMap.getFileExtensionFromUrl
renvoyé une chaîne vide pour les noms de fichiers qui ont des caractères non valides selon l'implémentation interne d'unPatternMatcher
. Cela a fonctionné complètement pour moi! J'ai adoré, aucun problème jusqu'à présent!String extension = file.getName().split("\\.")[1]
aurait également fonctionné, éliminant ainsi la méthode getExtension ().MimeTypeMap
peut ne pas reconnaître certaines extensions de fichiers comme flv, mpeg, 3gpp, cpp. Vous devez donc réfléchir à la manière d'étendre le MimeTypeMap pour maintenir votre code. Voici un exemple.http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils
De plus, voici une liste complète des types de mime
http: //www.sitepoint.com/web-foundations/mime-types-complete-list/
la source
Pour Xamarin Android (à partir de la réponse de @ HoaLe ci-dessus)
la source
la source
la source
la source
J'ai fait face à un problème similaire. Jusqu'à présent, je sais que le résultat peut différer pour différents noms, alors est finalement arrivé à cette solution.
la source
La solution ci-dessus a renvoyé null dans le cas d'un fichier .rar, en utilisant URLConnection.guessContentTypeFromName (url) a fonctionné dans ce cas.
la source
mime du fichier local:
la source
vous avez plusieurs choix pour obtenir l'extension du fichier: comme: 1-
String filename = uri.getLastPathSegment();
voir ce lien2-vous pouvez également utiliser ce code
mais ce n'est pas bon aproch. 3-si vous avez l'URI du fichier, utilisez ce code
4-si vous avez une URL, utilisez ce code:
profitez de votre code :)
la source
la source
la source
A également renvoyé une valeur nulle dans mon chemin de cas était
comme travail autour de l'utilisation
donc la méthode ressemble à
en conséquence, il renvoie le résultat de la réussite:
J'espère que ça aide n'importe qui
la source
Aucune des réponses ici n'est parfaite. Voici une réponse combinant les meilleurs éléments de toutes les réponses principales:
la source
la source
Je considère que le moyen le plus simple est de se référer à ce fichier de ressources: https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/libcore/net/android.mime.types
la source
Je ne me rends pas compte pourquoi
MimeTypeMap.getFileExtensionFromUrl()
a des problèmes avecspace
s et certains autres caractères, qui retourne""
, mais j'ai juste écrit cette méthode pour changer le nom du fichier en un nom admis. C'est juste jouer avec l'String
art. Cependant, cela fonctionne en quelque sorte. Grâce au procédé, lespace
s existant dans le nom de fichier est transformé en un caractère souhaitable (qui, ici, est "x") viareplaceAll(" ", "x")
et d'autres caractères inappropriés sont transformés en un caractère approprié viaURLEncoder
. donc l'utilisation (selon les codes présentés dans la question et la réponse sélectionnée) devrait être quelque chose commegetMimeType(reviseUrl(url))
.la source