100 votes

Comment puis-je obtenir le type mime d'un fichier à partir de son Uri ?

J'ai une liste d'Uris obtenue avec la Galerie et l'Appareil photo. Ces Uris sont comme ceci : content://media/external/images/media/94 . Comment puis-je obtenir son type mime ?

207voto

Kartik Points 12151

Vous pouvez essayer

ContentResolver cR = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(uri));

Edit :

mime.getExtensionFromMimeType(cR.getType(uri)) 

returns -> "jpeg" (retour)

cR.getType(uri);

renvoie "image/jpeg" qui est la valeur attendue.

35voto

Aaron Points 1066

Cette méthode retourne l'extension du fichier (jpg, png, pdf, epub etc..).

 public static String getMimeType(Context context, Uri uri) {
    String extension;

    //Check uri format to avoid null
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
        //If scheme is a content
        final MimeTypeMap mime = MimeTypeMap.getSingleton();
        extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri));
    } else {
        //If scheme is a File
        //This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
        extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString());

    }

    return extension;
}

20voto

Bhavesh Rangani Points 1015

Pour Content Uri .

ContentResolver cr = context.getContentResolver();
mimeType = cr.getType(contentUri);

pour File Uri .

String fileExtension = MimeTypeMap.getFileExtensionFromUrl(fileUri
            .toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
            fileExtension.toLowerCase());

pour les deux, fonctionne pour Content ainsi que File .

public String getMimeType(Context context, Uri uri) {
    String mimeType = null;
    if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        ContentResolver cr = context.getContentResolver();
        mimeType = cr.getType(uri);
    } else {
        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
                .toString());
        mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                fileExtension.toLowerCase());
    }
    return mimeType;
}

8voto

Mohamed Ibrahim Points 31

Au lieu de ça :

String type = mime.getExtensionFromMimeType(cR.getType(uri));

Faites-le :

String type = cR.getType(uri);

Et vous obtiendrez ceci : image/jpeg .

1voto

kulikovman Points 113

Retournez par exemple "image/jpeg".

fun Uri.getMimeType(context: Context): String? {
    return when (scheme) {
        ContentResolver.SCHEME_CONTENT -> context.contentResolver.getType(this)
        ContentResolver.SCHEME_FILE -> MimeTypeMap.getSingleton().getMimeTypeFromExtension(
            MimeTypeMap.getFileExtensionFromUrl(toString()).toLowerCase(Locale.US)
        )
        else -> null
    }
}

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