मैं एक फ़ाइल का माइम प्रकार कैसे प्राप्त कर सकता हूं, जिसमें उरी है?


85

मेरे पास गैलरी और कैमरा के साथ प्राप्त की गई एक सूची है। ये Uris इस तरह हैं content://media/external/images/media/94:। मैं इसका माइम प्रकार कैसे प्राप्त कर सकता हूं?

जवाबों:


175

तुम कोशिश कर सकते हो

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

संपादित करें:

mime.getExtensionFromMimeType(cR.getType(uri)) 

रिटर्न -> "jpeg"

cR.getType(uri);

"छवि / जेपीईजी" देता है जो अपेक्षित मूल्य है।


15
mime.getExtensionFromMimeType(cR.getType(uri))मुझे लौटाता है "jpeg"लेकिन वह cR.getType(uri)रिटर्न देता "image/jpeg"है जो अपेक्षित मूल्य है।
ब्रिस गैबिन

यह कुछ उपकरणों के लिए काम नहीं कर रहा है..क्या कोई विकल्प है?
अदिति पारिख

2
@AditiParikh यह जवाब मेरे लिए काम करता है ...
जिज्ञासु

1
@BraisGabin मैं एक .csv फ़ाइल में पढ़ने की कोशिश कर रहा हूँ। किसी कारण के लिए मुझे "पाठ / सीएसवी" मिलता है , cR.getType(uri)लेकिन इसके लिए ime.getExtensionFromMimeType(cR.getType(uri));मैं अशक्त हो जाता हूं। .Csv सिर्फ समर्थित या कुछ और नहीं है?
जस्टिन लियू

नहीं, यह समर्थित नहीं है। आप इस स्रोत कोड में वर्तमान में समर्थित एक्सटेंशन की सूची देख सकते हैं ।
ब्रिस गैबिन

34

यह विधि फ़ाइल का विस्तार (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;
}

2
मेरे लिए इसका काम .. मैंने डेवलपर
।android.com

@ एरॉन थैंक्स। यह गैर-अंग्रेजी फ़ाइल नामों के लिए पूरी तरह से काम करता है।
घासेम सदेगी

12

के लिए Content Uri

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

के लिए File Uri

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

दोनों के लिए, Contentसाथ ही साथ काम करता है 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;
}

MimeTypeMap.getFileExtensionFromUrl () के साथ सावधान रहें, यह सभी फ़ाइलनामों को संभालने में सक्षम नहीं लगता है। उदाहरण के लिए, मेरे एमुलेटर पर, कैमरे के साथ खींची गई तस्वीरों में फ़ाइल नाम में अल्पविराम और रिक्त स्थान होते हैं, जो इस पद्धति को खाली स्ट्रिंग वापस करने का कारण बनता है। मैं मैनुअल पार्सिंग के लिए वापस गिरने की सलाह देता हूं अगर विधि कॉल विफल हो जाती है (अंतिम का इंडेक्स प्राप्त करें। 'और इसका उपयोग करने के लिए
प्रतिस्थापन

8

इसके अलावा:

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

यह करो:

String type = cR.getType(uri);

और आपको यह मिलेगा image/jpeg:।


13
केवल सामग्री uris (सामग्री: //) के लिए काम करता है। फ़ाइल यूरिस (फ़ाइल: //) के लिए काम नहीं करता है
zyamys

वास्तव में रास्ता getType के लिए मायने नहीं रखता है। यह बस मामला है कि इरादे के दूसरे छोर को स्पष्ट रूप से इरादे के लिए प्रकार निर्धारित करने की आवश्यकता है। अक्सर कई बार रास्तों के लिए ऐसा नहीं होता है।
ताताराइज़ करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.