Подтвердить что ты не робот

Получите расширение файла из изображений, выбранных из галереи или камеры, в виде строки

Я хочу получить в качестве строки расширение изображения (например, "jpg", "png", "bmp" ecc.) изображений, загруженных из галереи или выбранных с камеры.

Я использовал метод в этой форме для загрузки изображений из галереи

    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;
    }
}
4b9b3361

Ответ 1

 filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png

или

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

Ответ 2

Я знаю это довольно поздно, но для тех, у кого до сих пор проблема, когда getContentResolver(). getType (uri) возвращает null, когда путь содержит пробелы. Это также решает проблему, когда изображение открывается через диспетчер файлов вместо галереи. Этот метод возвращает расширение файла (jpg, png, pdf, epub и т.д.).

 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;
}

Ответ 3

Я думаю, что это должно привести вас туда, где вы хотите (я не пробовал, просто читал немного, и я думаю, что это работает).

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

у вас есть несколько вариантов для получения расширения файла: например:

1- String filename = uri.getLastPathSegment(); см. ссылку

2- вы также можете использовать этот код

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

но это не очень хорошо.

3 - если у вас есть URI файла, используйте этот код

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

4 - если у вас есть URL-адрес, используйте этот код

public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
    type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;}

Ответ 5

getContentResolver().getType(theReceivedUri);

Вышеприведенный фрагмент дает вам тип "media/format"

Ответ 6

если вы получите content://media Uris в качестве результата, и вы хотите расширение, то вам нужно запросить базу данных, как вы это делаете, и извлечь, если из filePath. Например. с this

Чтобы получить имя файла из полного пути, самым простым решением является

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

Ответ 7

Я думаю, что это должно использовать MediaStore.MediaColumns.MIME_TYPE

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