web-dev-qa-db-fra.com

Obtenir l'extension de fichier à partir d'images sélectionnées dans la galerie ou dans un appareil photo, sous forme de chaîne

Je souhaite obtenir sous forme de chaîne l'extension de l'image (par exemple "jpg", "png", "bmp" etc.) des images chargées à partir de la galerie ou sélectionnées à partir de l'appareil photo.

J'ai utilisé une méthode sous cette forme pour charger des images de la galerie

    private static final int SELECT_PICTURE_ACTIVITY_REQUEST_CODE = 0;
....
private void selectPicture() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    startActivityForResult(intent, SELECT_PICTURE_ACTIVITY_REQUEST_CODE);
}
....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch (requestCode) {
        case SELECT_PICTURE_ACTIVITY_REQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = imageReturnedIntent.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                if (cursor.moveToFirst()) {
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    Bitmap bitmap = BitmapFactory.decodeFile(filePath);
                    .........
                }
                cursor.close();
            }
            break;
    }
}
24
AndreaF
 filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png

ou

 filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png
60
Samir Mangroliya

Je sais que c'est assez tard, mais pour ceux qui ont toujours un problème lorsque getContentResolver (). GetType (uri) renvoie null lorsque le chemin contient des espaces Cela résout également le problème lorsqu'une image est ouverte via le Gestionnaire de fichiers plutôt que par la galerie. 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;
}
14
Aaron
getContentResolver().getType(theReceivedUri);

L'extrait ci-dessus vous donne le type "média/format"

5
Anand

Je pense que cela devrait vous amener où vous voulez (je ne l'ai pas essayé, lisez-en un peu et je pense que cela fonctionne).

Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA, 
                           MediaStore.Images.Media.DISPLAY_NAME};
Cursor cursor =
     getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor.moveToFirst()) {
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    Bitmap bitmap = BitmapFactory.decodeFile(filePath);
    int fileNameIndex = cursor.getColumnIndex(filePathColumn[1]);
    String fileName = cursor.getString(fileNameIndex);
    // Here we get the extension you want
    String extension = fileName.replaceAll("^.*\\.", ""); 
    .........
}
cursor.close();
4
Boris Strandjev

vous avez le choix multiple d'obtenir l'extension du fichier: comme:

1 -String filename = uri.getLastPathSegment(); voir ce link

2- vous pouvez aussi utiliser ce code

 filePath .substring(filePath.lastIndexOf(".")+1);

mais ce n'est pas bon aproch.

3-si vous avez un URI de fichier, utilisez ce code

String[] projection = { MediaStore.MediaColumns.DATA,
    MediaStore.MediaColumns.MIME_TYPE };

4-si vous avez une URL, utilisez ce code

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
John smith

si vous obtenez content://media Uris comme résultat et que vous voulez l'extension, vous devez interroger la base de données comme vous le faites et extraire si de filePath. Par exemple. avec this

Pour extraire le nom de fichier d’un chemin complet, la solution la plus simple est

String filename = (new File(filePath)).getName();
0
zapl

Cher ami, nous pouvons trouver l’extension de n’importe quel fichier, image, vidéo et n'importe quelle documentation . Pour cela.

Tout d'abord, nous allons créer une méthode GetFileExtension que nous voulons appeler pour trouver l'extension d'un fichier, d'une image, de données et de documents. Ici j'ai pris une variable nommée:

Uri videouri = data.getData();

dans OnActivity Résultat, je l'invoque dans,

onclick(View view)
{
    GetFileExtension(videouri);
    Toast.makeText(this, "Exten: "+GetFileExtension(videouri), Toast.LENGTH_SHORT).show();
}

Maintenant créez une classe dans la classe GetFileExtension:

// Get Extension
public String GetFileExtension(Uri uri)
{
        ContentResolver contentResolver=getContentResolver();
        MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();

        // Return file Extension
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}

Grâce à cette méthode, nous pouvons trouver l’extension de n’importe quel fichier en Java et Android . Je suis sûr à 100% que cela fonctionnera pour tous ceux qui créent une application d'entreprise . Si vous aimez, votez pour moi ..

0
Pradeep Sheoran

Je pense que cela devrait utiliser MediaStore.MediaColumns.MIME_TYPE 

String[] projection = { MediaStore.MediaColumns.DATA,
        MediaStore.MediaColumns.MIME_TYPE };
0
gianguyen