202 votes

Comment déterminer le type MIME d'un fichier dans Android ?

Supposons que j'ai un chemin complet de fichier comme :(/sdcard/tlogo.png). Je veux connaître son type 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);

357voto

Jens Points 9062

Avant toute chose, vous devriez envisager d'appeler MimeTypeMap#getMimeTypeFromExtension() comme ceci :

// url = file path or whatever suitable URL you want.
public static String getMimeType(String url) {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }
    return type;
}

4 votes

Merci de travailler pour moi et une autre solution à mon problème est : public static String getMimeType(String path, Context) { String extention = path.substring(path.lastIndexOf(".") ) ; String mimeTypeMap =MimeTypeMap.getFileExtensionFromUrl(extention) ; String mimeType = MimeTypeMap.getSingleton() .getMimeTypeFromExtension(mimeTypeMap) ; return mimeType;}

15 votes

Et si le fichier n'a pas la bonne extension ? Une personne peut faire un .mp3 et il contient du texte.

2 votes

Il faudrait alors ouvrir le fichier et vérifier le nombre magique (qui dépend du format) dans l'introduction - cela suppose toutefois que la personne qui renomme les fichiers txt en mp3 n'a pas simplement écrit ID3 au début de son texte pour t'embêter encore plus.

36voto

Jeb Points 216

La solution MimeTypeMap ci-dessus retournait null dans mon utilisation. Cette solution fonctionne et est plus simple :

Uri uri = Uri.fromFile(file);
ContentResolver cR = context.getContentResolver();
String mime = cR.getType(uri);

22 votes

Cette méthode peut également retourner null.

0 votes

Il semble qu'il puisse retourner null ou non, selon l'URI. Personne ne semble savoir pourquoi ;-(

12 votes

Si le média est sélectionné dans la galerie Android, TYPE est renvoyé. Si le média est sélectionné dans le gestionnaire de fichiers, null est renvoyé.

16voto

umerk44 Points 329
File file = new File(path, name);

    MimeTypeMap mime = MimeTypeMap.getSingleton();
    int index = file.getName().lastIndexOf('.')+1;
    String ext = file.getName().substring(index).toLowerCase();
    String type = mime.getMimeTypeFromExtension(ext);

    intent.setDataAndType(Uri.fromFile(file), type);
    try
    {
      context.startActivity(intent);
    }
    catch(ActivityNotFoundException ex)
    {
        ex.printStackTrace();

    }

1 votes

Cela fonctionne parfaitement pour moi ! Mais comment utiliser FilenameUtils.getExetension(path) pour obtenir l'extension du fichier ?

0 votes

Ça marche pour moi... ! Bonne solution...

7voto

Mike Kogan Points 101

Faites très attention à umerk44 's solution ci-dessus. getMimeTypeFromExtension invoque guessMimeTypeTypeFromExtension et est sensible à la casse. J'ai passé un après-midi sur ce sujet puis j'ai regardé de plus près - getMimeTypeFromExtension retournera NULL si vous lui passez "JPG" alors qu'il retournera "image/jpeg" si vous lui passez "jpg".

6voto

Mahendra Points 2298

Voici la solution que j'ai utilisée dans mon application Android :

public static String getMimeType(String url)
    {
        String extension = url.substring(url.lastIndexOf("."));
        String mimeTypeMap = MimeTypeMap.getFileExtensionFromUrl(extension);
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(mimeTypeMap);
        return mimeType;
    }

1 votes

Url ? Beaucoup d'url n'ont pas d'extension. Par exemple, cette page n'a pas d'extension. Pour l'url, vous devez utiliser new URL(url).openConnection().getRequestProperty("Content-type") ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X