【问题标题】:Get the file extension from images picked from gallery or camera, as string从从画廊或相机中挑选的图像中获取文件扩展名,作为字符串
【发布时间】:2012-04-03 05:29:38
【问题描述】:

我想以字符串形式获取从图库加载或从相机中挑选的图像的图像扩展名(例如“jpg”、“png”、“bmp”等)。

我已经使用这种形式的方法从图库中加载图像

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

【问题讨论】:

标签: android android-camera android-gallery


【解决方案1】:
 filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png

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

【讨论】:

  • String filePath = cursor.getString(columnIndex);
  • 我试过没有成功......究竟什么是“strname”?你能给我更多的细节来看看我用过的方法吗?谢谢。
  • 查看我更新的答案并查看 .jpg 或 jpg...并检查 if(null!=filepath&&filepath.trim().lenght()!=0){...}跨度>
【解决方案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;
}

【讨论】:

  • String mimeType = context.getContentResolver().getType(uri); //获取值:“图像/jpg”;字符串扩展 = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); // 获取null
  • 将文件 Uri 转为 File 然后再转为 Uri 有点多余。
  • 因为我需要解析空格和特殊字符,即空格应该是 %20。在 uri 路径上使用 new File() 将自动解析这些特殊字符。如果删除此部分,此代码将对包含空格或特殊字符的文件名抛出错误
【解决方案3】:
getContentResolver().getType(theReceivedUri);

上面的 sn-p 让你得到类型为“媒体/格式”

【讨论】:

    【解决方案4】:

    你有多种选择来获取文件的扩展名:like:

    1-String filename = uri.getLastPathSegment(); 看到这个link

    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】:

      亲爱的朋友,我们可以找到任何文件、图像、视频和任何文档的扩展名。 为此。

      首先,我们将创建一个方法GetFileExtension,我们要调用它来查找文件、图像、数据和文档的扩展名。这里我取了一个变量命名:

      Uri videouri = data.getData();
      

      OnActivity Result 然后我调用它,

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

      现在为GetFileExtension创建一个班级:

      // Get Extension
      public String GetFileExtension(Uri uri)
      {
              ContentResolver contentResolver=getContentResolver();
              MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();
      
              // Return file Extension
              return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
      }
      

      由于这种方法,我们可以在 java 和 android 中找出任何文件的扩展名。 我 100 % 确定它适用于所有制作企业应用程序的人。 喜欢就投我一票吧..

      【讨论】:

        【解决方案6】:

        我认为这应该可以让你到达你想要的地方(我还没有尝试过,只是阅读了一下,我认为它有效)。

        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();
        

        【讨论】:

        • 不(至少很确定)。 MediaStore.Images.Media.DISPLAY_NAME 的文件名不带扩展名。该数据库中唯一包含扩展名的位置是MediaStore.Images.Media.DATA
        • The data stream for the file,嗯?然后文档很糟糕。
        • 嗯,我错了。 DISPLAY_NAME 包含扩展名,TITLE 是它被剥离的列 - 刚刚在数据库中检查。在 DATA 中,您有完整的路径。
        • 关于DISPLAY_NAMETITLE:如果没有更好的可用文件名(例如通过MediaScanner),文件名仅用作default 值。获取文件名的唯一安全位置是 DATA。那必须是真正的文件路径。
        • @Boris 我尝试使用此代码但不起作用...扩展字符串结果为空
        【解决方案7】:

        对于“content://”sheme

        fun Uri.getFileExtension(context: Context): String? {
            return MimeTypeMap.getSingleton()
                .getExtensionFromMimeType(context.contentResolver.getType(this))
        }
        

        【讨论】:

          【解决方案8】:

          如果你得到content://media Uris 作为结果并且你想要扩展,那么你必须像你一样查询数据库并从filePath 中提取if。例如。 this

          要从完整路径中获取文件名,最简单的解决方案是

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

          【讨论】:

            【解决方案9】:

            我认为这应该使用MediaStore.MediaColumns.MIME_TYPE

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-05-12
              • 2012-11-07
              • 2012-02-23
              • 1970-01-01
              • 2013-12-14
              • 1970-01-01
              • 2017-03-03
              相关资源
              最近更新 更多