অ্যান্ড্রয়েডে এমআইএমআই টাইপ ফাইল কীভাবে নির্ধারণ করবেন?


176

ধরুন আমার কাছে ফাইলের পুরো পথ রয়েছে: (/ sdcard / tlogo.png)। আমি এর মাইম টাইপ জানতে চাই।

আমি এটির জন্য একটি ফাংশন তৈরি করেছি

public static String getMimeType(File file, Context context)    
{
    Uri uri = Uri.fromFile(file);
    ContentResolver cR = context.getContentResolver();
    MimeTypeMap mime = MimeTypeMap.getSingleton();
    String type = mime.getExtensionFromMimeType(cR.getType(uri));
    return type;
}

কিন্তু যখন আমি এটি বলি, এটি শূন্য হয়।

File file = new File(filePath);
String fileType=CommonFunctions.getMimeType(file, context);

উত্তর:


323

প্রথম এবং সর্বাগ্রে, আপনার কলিংয়ের বিষয়টি বিবেচনা করা উচিত MimeTypeMap#getMimeTypeFromExtension():

// url = file path or whatever suitable URL you want.
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
ধন্যবাদ আমার জন্য কাজ এবং আমার সমস্যার আর একটি সমাধান হ'ল: পাবলিক স্ট্যাটিক স্ট্রিং গেটমাইমটাইপ (স্ট্রিং পাথ, প্রসঙ্গ প্রসঙ্গ) ring স্ট্রিং এক্সটেনশন = পাথ.সুবস্ট্রিং (path.lastIndexOf ("।")); স্ট্রিং মাইমটাইপম্যাপ = মাইমটাইপম্যাপ.জেটফাইএল এক্সটেনশনফ্রুম ইউআরএল (এক্সটেনশন); স্ট্রিং মাইমটাইপ = মাইমটাইপম্যাপ.সেটসিংটন () .গেটমাইমটাইপফ্রোম এক্সটেনশন (মাইমটাইপম্যাপ); রিটার্ন মাইমটাইপ;}
সুশান্ত ভাটনগর

13
এবং যদি ফাইলটির ভাল এক্সটেনশন না থাকে? কোনও ব্যক্তি একটি। এমপি 3 তৈরি করতে পারে এবং এতে পাঠ্য রয়েছে
throrin19

2
এই তবে, অনুমান যে ব্যক্তি থেকে এমপি 3 পাঠ্য-ফাইল পুনঃনামকরনের শুধু লিখিনি - তাহলে আপনি আসলে ফাইল খোলার & ম্যাজিক নম্বর পরীক্ষা নেতৃত্ব-ইন মধ্যে (বিন্যাসটি Ofc উপর নির্ভর করে) প্রয়োজন চাই ID3মধ্যে তাঁর পাঠ্যের সূচনা আপনার সাথে আরও গোলমেলে।
জেনস

1
যদি ফাইলটির অজানা এক্সটেনশন থাকে। পদ্ধতি কি ফিরে আসে */*?

3
আপনার যদি / স্টোরেজ / এমুলেটেড / 0 / ডাউনলোড / ইমেজ (4) .jpg হিসাবে ফাইলের পথ থাকে এবং আপনি মাইমটাইপের জন্য জিজ্ঞাসা করেন তবে এটি বাতিল হয়ে যায়।
কালাইসেলভান

165

যে কোনও ফাইলের মাইম প্রকারটি সনাক্ত করুন

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

5
এটি সঠিক উত্তর হওয়া উচিত। toLowerCase()কৌতুকটি করেছে
রজত সাক্সেনা ২

1
এটি এখন পর্যন্ত সেরা উত্তর তবে এটি ফাইলের নামটিতে একটি বিশেষ চরিত্র থাকলে খারাপভাবে ব্যর্থ হয়, আমার ক্ষেত্রে এটি apostrophe! যেমন। ফাইলের নাম = Don't go baby.mp3PatternMatcherভিতরে MimeTypeMap.getFileExtensionFromUrl()ফাইলের নাম পরিচালনা এবং খালি স্ট্রিং ফেরৎ যেতে পারে; নাল মাইমটাইপ স্ট্রিং হয়ে বেরিয়ে আসে!
Sud007

I. Shvedenenkoউপরে উল্লিখিত ইস্যুগুলির জন্য ওয়ার্কের নীচে অনুরূপ তবে ত্রুটি মুক্ত সমাধান রয়েছে । তবে এই উত্তরটি সঠিক দিক নির্দেশক ছিল।
Sud007

এই কোডটি স্ট্রিং "/ স্টোরেজ / এমুলেটেড / 0 / ডিসিআইএম / স্ক্রিনশটস / স্ক্রিনশট_20190319-123828_ubl ডিজিটাল অ্যাপ্লিকেশন.জেপজি" দিয়ে নালার প্রত্যাবর্তন করে।
আব্দুল

@ আবদুল এটি কারণ যে পথটিতে উরির পরিকল্পনা নেই। এটি হয় হয় file://বা দিয়ে শুরু করা উচিত content://
এইচবি।

33

উপরের মাইমটাইপম্যাপ সমাধানটি আমার ব্যবহারের বাতিল করে দিয়েছে। এটি কাজ করে এবং আরও সহজ:

Uri uri = Uri.fromFile(file);
ContentResolver cR = context.getContentResolver();
String mime = cR.getType(uri);

19
এই পদ্ধতিটিও নালার দিকে ফিরে আসতে পারে।
মিস্টার স্মিথ

দেখে মনে হচ্ছে এটি ইউআরআই অনুসারে বাতিল বা না ফিরে আসতে পারে। কোনও শরীর কেন জানি না বলে মনে হচ্ছে ;-(
টমাস ডেকাউক্স

10
মিডিয়া যদি অ্যান্ড্রয়েড গ্যালারী থেকে নির্বাচিত হয় তবে টিওয়াইপিই ফিরে আসে। যদি ফাইল ম্যানেজার থেকে নির্বাচন করা হয় তবে নালটি ফিরে আসবে।
রাহুল রাস্তোগি 27'14

আমি রাহুল যা বলেছিলেন তা ইতিবাচকভাবে নিশ্চিত করতে পারি, এটি কেবল পরীক্ষিত হয়েছে এবং তিনি ঠিক বলেছেন
ক্রিস

কিছু ডিভাইসে যদি আমি গ্যালারী থেকে চিত্রটি নির্বাচন করি তবে এটি বাতিল হয়ে যায়
ঘনশ্যাম নায়মা

21

সংস্করণ অনুকূল জেনস ' নাল-নিরাপত্তা এবং ফলব্যাক-টাইপ সঙ্গে answere।

@NonNull
static String getMimeType(@NonNull File file) {
    String type = null;
    final String url = file.toString();
    final String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
    }
    if (type == null) {
        type = "image/*"; // fallback type. You might set it to */*
    }
    return type;
}

গুরুত্বপূর্ণ : getFileExistanceFromUrl () কেবল ছোট হাতের সাথে কাজ করে !


আপডেট (19.03.2018)

বোনাস: উপরের পদ্ধতিগুলি কম ভার্বোস কোটলিন এক্সটেনশন ফাংশন হিসাবে :

fun File.getMimeType(fallback: String = "image/*"): String {
    return MimeTypeMap.getFileExtensionFromUrl(toString())
            ?.run { MimeTypeMap.getSingleton().getMimeTypeFromExtension(toLowerCase()) }
            ?: fallback // You might set it to */*
}

এই কাজ। যদিও আমার পছন্দ মত কিছুটা অতিরিক্ত ভার্জোজ।
ফিলিটি_উইজার্ড

অবশ্যই এটি একটি সংক্ষিপ্ত পদ্ধতিতে লিখিত হতে পারে। কোটলিনের সাথে সম্ভবত কেবল দুটি বা তিনটি লাইন রয়েছে, তবে শিয়াল নালীর সুরক্ষা এবং toLoverCaseঅংশে ছিল।
টোবিয়াস

@ ফিলিটি_উইজার্ড, কেবলমাত্র আপনার জন্য একটি অনুকূলিত সংস্করণ যুক্ত করেছে ;-)
টোবিয়াস

আমার হিসাবে টুস্ট্রিং () এর পরিবর্তে getPath () পদ্ধতি ব্যবহার করা আরও স্পষ্ট এবং কোটলিন সম্পত্তি অ্যাক্সেস সিনট্যাক্স ব্যবহার করে কেবল পথ।
লিওনিড

15
File file = new File(path, name);

    MimeTypeMap mime = MimeTypeMap.getSingleton();
    int index = file.getName().lastIndexOf('.')+1;
    String ext = file.getName().substring(index).toLowerCase();
    String type = mime.getMimeTypeFromExtension(ext);

    intent.setDataAndType(Uri.fromFile(file), type);
    try
    {
      context.startActivity(intent);
    }
    catch(ActivityNotFoundException ex)
    {
        ex.printStackTrace();

    }

1
আমার জন্য নিখুঁত কাজ করে! তবে ফাইল এক্সটেনশনটি পেতে ফাইলের নাম.টাইল এক্সটেনশন (পথ) কীভাবে ব্যবহার করবেন?
পিটারব

7

উপরের umerk44 এর সমাধানের দিকে গভীর নজর দিন । getMimeTypeFromExtensionপূজা guessMimeTypeTypeFromExtensionএবং কেস সংবেদনশীল। আমি এটির জন্য একটি বিকেল অতিবাহিত করেছি এবং আরও কাছাকাছি দেখেছি - getMimeTypeFromExtensionআপনি NULLযদি এটি "জেপিজি" পাস করেন তবে ফিরে আসবে যদিও আপনি "জেপিজি" পাস করলে এটি "চিত্র / জেপিগ" ফিরে আসবে।


5

আমি আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে যে সমাধানটি ব্যবহার করেছি তা এখানে:

public static String getMimeType(String url)
    {
        String extension = url.substring(url.lastIndexOf("."));
        String mimeTypeMap = MimeTypeMap.getFileExtensionFromUrl(extension);
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(mimeTypeMap);
        return mimeType;
    }

1
URL? অনেকগুলি url এর এক্সটেনশন নেই। উদাহরণস্বরূপ এই পৃষ্ঠার এক্সটেনশন নেই। ইউআরএল-এর জন্য আপনার নতুন ইউআরএল (url) ব্যবহার করা উচিত opপেন সংযোগ () get
বারউনিকিক

5

কখনও কখনও জেব এবং জেনসের উত্তরগুলি কার্যকর হয় না এবং বাতিল হয় না। এই ক্ষেত্রে আমি অনুসরণ সমাধান ব্যবহার। ফাইলের প্রধানটিতে সাধারণত স্বাক্ষর টাইপ থাকে। আমি এটি পড়েছি এবং স্বাক্ষরগুলির তালিকাতে পরিচিতের সাথে তুলনা করি ।

/**
 *
 * @param is InputStream on start of file. Otherwise signature can not be defined.
 * @return int id of signature or -1, if unknown signature was found. See SIGNATURE_ID_(type) constants to
 *      identify signature by its id.
 * @throws IOException in cases of read errors.
 */
public static int getSignatureIdFromHeader(InputStream is) throws IOException {
    // read signature from head of source and compare with known signatures
    int signatureId = -1;
    int sigCount = SIGNATURES.length;
    int[] byteArray = new int[MAX_SIGNATURE_LENGTH];
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < MAX_SIGNATURE_LENGTH; i++) {
        byteArray[i] = is.read();
        builder.append(Integer.toHexString(byteArray[i]));
    }
    if (DEBUG) {
        Log.d(TAG, "head bytes=" + builder.toString());
    }
    for (int i = 0; i < MAX_SIGNATURE_LENGTH; i++) {

        // check each bytes with known signatures
        int bytes = byteArray[i];
        int lastSigId = -1;
        int coincidences = 0;

        for (int j = 0; j < sigCount; j++) {
            int[] sig = SIGNATURES[j];

            if (DEBUG) {
                Log.d(TAG, "compare" + i + ": " + Integer.toHexString(bytes) + " with " + sig[i]);
            }
            if (bytes == sig[i]) {
                lastSigId = j;
                coincidences++;
            }
        }

        // signature is unknown
        if (coincidences == 0) {
            break;
        }
        // if first bytes of signature is known we check signature for full coincidence
        if (coincidences == 1) {
            int[] sig = SIGNATURES[lastSigId];
            int sigLength = sig.length;
            boolean isSigKnown = true;
            for (; i < MAX_SIGNATURE_LENGTH && i < sigLength; i++) {
                bytes = byteArray[i];
                if (bytes != sig[i]) {
                    isSigKnown = false;
                    break;
                }
            }
            if (isSigKnown) {
                signatureId = lastSigId;
            }
            break;
        }
    }
    return signatureId;
}

signatureIdস্বাক্ষরের অ্যারেতে স্বাক্ষরের সূচক। উদাহরণ স্বরূপ,

private static final int[] SIGNATURE_PNG = hexStringToIntArray("89504E470D0A1A0A");
private static final int[] SIGNATURE_JPEG = hexStringToIntArray("FFD8FF");
private static final int[] SIGNATURE_GIF = hexStringToIntArray("474946");

public static final int SIGNATURE_ID_JPEG = 0;
public static final int SIGNATURE_ID_PNG = 1;
public static final int SIGNATURE_ID_GIF = 2;
private static final int[][] SIGNATURES = new int[3][];

static {
    SIGNATURES[SIGNATURE_ID_JPEG] = SIGNATURE_JPEG;
    SIGNATURES[SIGNATURE_ID_PNG] = SIGNATURE_PNG;
    SIGNATURES[SIGNATURE_ID_GIF] = SIGNATURE_GIF;
}

এখন আমার ফাইল টাইপ আছে এমনকি যদি ফাইলের ইউআরআই না থাকে। পরবর্তী আমি ফাইল টাইপ দ্বারা মাইম টাইপ পেতে। কোন মাইম টাইপটি পেতে হবে তা যদি আপনি না জানেন তবে আপনি এই টেবিলটিতে সঠিকটি পেতে পারেন ।

এটি অনেক ধরণের ফাইলের জন্য কাজ করে। তবে ভিডিওর জন্য এটি কাজ করে না, কারণ মাইম টাইপ পাওয়ার জন্য আপনাকে ভিডিও কোডেক জানা দরকার। ভিডিওর মাইম টাইপ পেতে আমি মিডিয়ামেটাডাটা রিটারিভার ব্যবহার করি ।


4

মাইমের ধরণ নির্ধারণের জন্য আমি স্ট্যান্ডার্ড পদ্ধতিগুলি ব্যবহার করার চেষ্টা করেছি, তবে আমি ফাইল এক্সটেনশনটি ব্যবহার করে ধরে রাখতে পারি না MimeTypeMap.getFileExtensionFromUrl(uri.getPath())। এই পদ্ধতিটি আমাকে একটি খালি স্ট্রিং ফিরিয়ে দিয়েছে। সুতরাং আমি ফাইলের এক্সটেনশন ধরে রাখতে একটি তুচ্ছ সমাধান তৈরি করেছি।

ফাইল এক্সটেনশন ফিরিয়ে দেওয়ার পদ্ধতিটি এখানে:

private String getExtension(String fileName){
    char[] arrayOfFilename = fileName.toCharArray();
    for(int i = arrayOfFilename.length-1; i > 0; i--){
        if(arrayOfFilename[i] == '.'){
            return fileName.substring(i+1, fileName.length());
        }
    }
    return "";
}

এবং ফাইলের এক্সটেনশন ধরে রেখে, নীচের মতো মাইম টাইপ পাওয়া সম্ভব:

public String getMimeType(File file) {
    String mimeType = "";
    String extension = getExtension(file.getName());
    if (MimeTypeMap.getSingleton().hasExtension(extension)) {
        mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }
    return mimeType;
}

ম্যান, এই সমস্যাটিতে এখানে পোস্ট করা সমস্ত উত্তর পেরেক করেছে! সমস্ত লিগ্যাসি ক্লাসে আমার একই সমস্যা ছিল। ইস্যুটি যেমনটি আপনি উল্লিখিত ছিলেন তেমনই ছিল, MimeTypeMap.getFileExtensionFromUrlফাইলের নামগুলির জন্য খালি স্ট্রিং ফিরিয়েছে যা এ এর ​​অভ্যন্তরীণ বাস্তবায়ন অনুসারে অবৈধ অক্ষর রয়েছে PatternMatcher। এটি আমার জন্য পুরোপুরি কাজ করেছিল! এটি পছন্দ, এখন পর্যন্ত কোন সমস্যা!
Sud007

@I। শেভেডেনকোও String extension = file.getName().split("\\.")[1]এইভাবে কাজ এক্সটেনশন () পদ্ধতিটি সরিয়ে কাজ করবে।
শাহউদ উল হাসান

তবে বিষয়টি হ'ল, ফাইলটি তৈরি করার সময় যদি কোনও ভুল এক্সটেনশন ব্যবহার করা হয়? এক্সটেনশনের মাইম টাইপের একমাত্র বিচারক হওয়া উচিত?
শাহুদ উল হাসান

2

MimeTypeMapকিছু ফাইল এক্সটেনশন যেমন flv, এমপিইগ, 3 জিপিপি, সিপিসি সনাক্ত করতে পারে না। সুতরাং আপনার কোডটি বজায় রাখার জন্য মাইমটাইপম্যাপটি কীভাবে প্রসারিত করবেন তা ভাবতে হবে। এখানে যেমন একটি উদাহরণ।

http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils

এছাড়াও, মাইম ধরণের সম্পূর্ণ তালিকা এখানে

http: //www.sitepPoint.com/web-foundations/mime-tyype-complete-list/


2

জন্য Xamarin অ্যান্ড্রয়েড (@ উপরে HoaLe এর উত্তর থেকে)

public String getMimeType(Uri uri) {
    String mimeType = null;
    if (uri.Scheme.Equals(ContentResolver.SchemeContent))
    {
        ContentResolver cr = Application.Context.ContentResolver;
        mimeType = cr.GetType(uri);
    }
    else
    {
        String fileExtension = MimeTypeMap.GetFileExtensionFromUrl(uri.ToString());
        mimeType = MimeTypeMap.Singleton.GetMimeTypeFromExtension(
        fileExtension.ToLower());
    }
    return mimeType;
}

1
get file object....
File file = new File(filePath);

then....pass as a parameter to...

getMimeType(file);

...here is 


public String getMimeType(File file) {
        String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString()).toLowerCase());
        if (mimetype == null) {
            return "*/*";
        }
        return mimetype;///return the mimeType
    }

1

সম্পদ / ফাইল থেকে থাকাকালীন (লক্ষ্য করুন যে মাইমটাইপম্যাপ থেকে কয়েকটি মামলা অনুপস্থিত)।

private String getMimeType(String path) {
    if (null == path) return "*/*";

    String extension = path;
    int lastDot = extension.lastIndexOf('.');
    if (lastDot != -1) {
        extension = extension.substring(lastDot + 1);
    }

    // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185).
    extension = extension.toLowerCase(Locale.getDefault());
    if (extension.equals("3ga")) {
        return "audio/3gpp";
    } else if (extension.equals("js")) {
        return "text/javascript";
    } else if (extension.equals("woff")) {
        return "application/x-font-woff";
    } else {
        // TODO
        // anyting missing from the map (http://www.sitepoint.com/web-foundations/mime-types-complete-list/)
        // reference: http://grepcode.com/file/repo1.maven.org/maven2/com.google.okhttp/okhttp/20120626/libcore/net/MimeUtils.java#MimeUtils
    }

    return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}

ContentResolver ব্যবহার করার সময়

contentResolver.getType(uri)

HTTP / https অনুরোধ করার সময়

    try {
        HttpURLConnection conn = httpClient.open(new URL(uri.toString()));
        conn.setDoInput(false);
        conn.setRequestMethod("HEAD");
        return conn.getHeaderField("Content-Type");
    } catch (IOException e) {
    }

1
// This will return the mimeType. 
// for eg. xyz.png it will return image/png. 
// here uri is the file that we were picked using intent from ext/internal storage.
private String getMimeType(Uri uri) {
   // This class provides applications access to the content model.  
   ContentResolver contentResolver = getContentResolver();

   // getType(Uri url)-Return the MIME type of the given content URL. 
   return contentResolver.getType(uri);
}

দয়া করে কিছু ব্যাখ্যা দিন। এটি প্রাথমিক পাঠককে তার / তার কোডটি এবং আরও পাঠকদের আপনার উত্তর থেকে সর্বাধিক মান পেতে অভিযোজিত করতে সহায়তা করবে।
অরুলিয়ান বি

আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ. আমি ব্যাখ্যা সহ এটি সম্পাদনা।
iamdhariot

1

আমিও একই সমস্যার মুখোমুখি হয়েছি। এখন পর্যন্ত আমি জানি ফলাফল বিভিন্ন নামের জন্য আলাদা হতে পারে, তাই শেষ পর্যন্ত এই সমাধানে এসেছিল।

public String getMimeType(String filePath) {
    String type = null;
    String extension = null;
    int i = filePath.lastIndexOf('.');
    if (i > 0)
        extension = filePath.substring(i+1);
    if (extension != null)
        type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    return type;
}  


0

স্থানীয় ফাইল থেকে মাইম:

String url = file.getAbsolutePath();
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String mime = fileNameMap.getContentTypeFor("file://"+url);

0

আপনার ফাইলের এক্সটেনশন পেতে একাধিক পছন্দ রয়েছে: যেমন: 1- String filename = uri.getLastPathSegment();এই লিঙ্কটি দেখুন

2-আপনি এই কোডটিও ব্যবহার করতে পারেন

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

তবে এটি খুব ভাল নয়। 3-আপনার যদি ফাইলের ইউআরআই থাকে তবে এই কোডটি ব্যবহার করুন

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

আপনার কোড উপভোগ করুন :)


0
// new processing the mime type out of Uri which may return null in some cases
String mimeType = getContentResolver().getType(uri);
// old processing the mime type out of path using the extension part if new way returned null
if (mimeType == null){mimeType URLConnection.guessContentTypeFromName(path);}

0
public static String getFileType(Uri file)
{
    try
    {
        if (file.getScheme().equals(ContentResolver.SCHEME_CONTENT))
            return subStringFromLastMark(SystemMaster.getContentResolver().getType(file), "/");
        else
            return MimeTypeMap.getFileExtensionFromUrl(file.toString()).toLowerCase();
    }
    catch(Exception e)
    {
        return null;
    }
}

public static String getMimeType(Uri file)
{
    try
    {
        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(getFileType(file));
    }
    catch(Exception e)
    {
        return null;
    }
}

public static String subStringFromLastMark(String str,String mark)
{
    int l = str.lastIndexOf(mark);
    int end = str.length();
    if(l == -1)
        return str;

    return str.substring(l + 1, end);
}

0

আমার ক্ষেত্রে পথের নাল মানও ফিরে এসেছে

/ স্টোরেজ / এমুলেটেড / 0 / সংগীত / 01 - ডান্স ফ্লোর.এমপি 3-তে ভূত

ব্যবহার প্রায় কাজ হিসাবে

ভাল url = inUll.replace ("", "")

সুতরাং পদ্ধতি মত দেখাচ্ছে

@JvmStatic
    fun getMimeType(inUrl: String?): String {
        if (inUrl == null) return ""

        val url = inUrl.replace(" ","")
        var type: String? = null

        val extension = MimeTypeMap.getFileExtensionFromUrl(url)
        if (extension != null) {
            type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase())
        }

        if(type ==null){
            val cR = WifiTalkie.getApplicationContext().contentResolver
            type = cR.getType(Uri.parse(url))
        }

        if (type == null) {
            type = "*/*" // fallback method_type. You might set it to */*
        }
        return type
    }

ফলাফল হিসাবে এটি সাফল্যের ফলাফল:

অডিও / MPEG

আশা করি এটি যে কাউকে সাহায্য করবে


0

এখানে উত্তরগুলির কোনওটিই নিখুঁত নয়। সমস্ত শীর্ষ উত্তরের সেরা উপাদানগুলির সংমিশ্রণে একটি উত্তর এখানে দেওয়া হয়েছে:

public final class FileUtil {

    // By default, Android doesn't provide support for JSON
    public static final String MIME_TYPE_JSON = "application/json";

    @Nullable
    public static String getMimeType(@NonNull Context context, @NonNull Uri uri) {

        String mimeType = null;
        if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
            ContentResolver cr = context.getContentResolver();
            mimeType = cr.getType(uri);
        } else {
            String fileExtension = getExtension(uri.toString());

            if(fileExtension == null){
                return null;
            }

            mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                    fileExtension.toLowerCase());

            if(mimeType == null){
                // Handle the misc file extensions
                return handleMiscFileExtensions(fileExtension);
            }
        }
        return mimeType;
    }

    @Nullable
    private static String getExtension(@Nullable String fileName){

        if(fileName == null || TextUtils.isEmpty(fileName)){
            return null;
        }

        char[] arrayOfFilename = fileName.toCharArray();
        for(int i = arrayOfFilename.length-1; i > 0; i--){
            if(arrayOfFilename[i] == '.'){
                return fileName.substring(i+1, fileName.length());
            }
        }
        return null;
    }

    @Nullable
    private static String handleMiscFileExtensions(@NonNull String extension){

        if(extension.equals("json")){
            return MIME_TYPE_JSON;
        }
        else{
            return null;
        }
    }
}

0
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
                        File file = new File(filePatch); 
                        Uri uris = Uri.fromFile(file);
                        String mimetype = null;
                        if 
(uris.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
                            ContentResolver cr = 
getApplicationContext().getContentResolver();
                            mimetype = cr.getType(uris);
                        } else {
                            String fileExtension = 
MimeTypeMap.getFileExtensionFromUrl(uris.toString());
mimetype =  MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension.toLowerCase());
                        }


0

আমি বুঝতে পারি না কেন এস এবং কিছু অন্যান্য চরিত্রের MimeTypeMap.getFileExtensionFromUrl()সাথে সমস্যা আছে space, এটি ফিরে আসে "", তবে আমি ফাইলের নামটি কোনও ভর্তি-সক্ষম হিসাবে পরিবর্তনের জন্য এই পদ্ধতিটি লিখেছিলাম। এটা শুধু Stringএস সঙ্গে খেলছে । যাইহোক, এটি কাজ ধরণের। পদ্ধতির মাধ্যমে spaceফাইলের নামের বিদ্যমানগুলি একটি পছন্দসই চরিত্রে রূপান্তরিত হয় (যা এখানে "x" হয়) replaceAll(" ", "x")এবং অন্যান্য অনুপযুক্ত অক্ষরগুলির মাধ্যমে একটি উপযুক্ত চরিত্রে রূপান্তরিত হয় URLEncoder। সুতরাং ব্যবহার (প্রশ্নের উপস্থাপিত কোড এবং নির্বাচিত উত্তর অনুসারে) এর মতো কিছু হওয়া উচিত getMimeType(reviseUrl(url))

private String reviseUrl(String url) {

        String revisedUrl = "";
        int fileNameBeginning = url.lastIndexOf("/");
        int fileNameEnding = url.lastIndexOf(".");

        String cutFileNameFromUrl = url.substring(fileNameBeginning + 1, fileNameEnding).replaceAll(" ", "x");

        revisedUrl = url.
                substring(0, fileNameBeginning + 1) +
                java.net.URLEncoder.encode(cutFileNameFromUrl) +
                url.substring(fileNameEnding, url.length());

        return revisedUrl;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.