android image - 我如何獲得具有其Uri的文件的mime類型?



zip unknown (5)

此方法返回文件的擴展名(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;
}

我有一個用畫廊和相機獲得的Uris列表。 這些Uris是這樣的: content://media/external/images/media/94 。 我怎麼能得到它的mime類型?


而不是這個:

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

做這個:

String type = cR.getType(uri);

你會得到這個: image/jpeg


對於Content Uri

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

for File Uri

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

for Both,適用於ContentFile

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

你可以試試

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

編輯:

mime.getExtensionFromMimeType(cR.getType(uri)) 

返回 - >“jpeg”

cR.getType(uri);

返回預期值“image / jpeg”。


MIME代表多用途Internet郵件擴展 。 這是根據其性質和格式在互聯網上識別文件的一種方式。

例如,使用HTTP響應中定義的Content-type頭值,瀏覽器可以用適當的擴展/ 插件打開文件。

Internet媒體類型 (也是Content-type )與MIME類型相同。 MIME類型最初是為使用SMTP協議發送的電子郵件創建的。 現在,這個標準被用在很多其他的協議中,因此新的命名規則是“Internet Media Type”。

MIME類型是由兩部分組成的字符串標識符:一個type和一個subtype

  • “類型”是指多個彼此密切相關的MIME類型的邏輯分組; 它不過是一個高層次的類別。
  • “子類型”特定於“類型”中的一種文件類型。

MIME子類型的x-前綴僅僅意味著它是非標準的。
vnd前綴表示MIME值是供應商特定的。

Source





android uri mime-types