Làm cách nào để xác định loại MIME của tệp trong Android?


176

Giả sử tôi có một đường dẫn đầy đủ của tệp như: (/ sdcard / tlogo.png). Tôi muốn biết loại mime của nó.

Tôi đã tạo một chức năng cho nó

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

nhưng khi tôi gọi nó, nó trả về null.

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

Câu trả lời:


323

Đầu tiên và quan trọng nhất, bạn nên xem xét việc gọi MimeTypeMap#getMimeTypeFromExtension(), như thế này:

// 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
cảm ơn công việc cho tôi và một giải pháp khác cho vấn đề của tôi là: chuỗi tĩnh công khai getMimeType (Đường dẫn chuỗi, bối cảnh bối cảnh) {Chuỗi extention = path.sub chuỗi (path.lastIndexOf (".")); Chuỗi mimeTypeMap = MimeTypeMap.getFileExtensionFromUrl (mở rộng); Chuỗi mimeType = MimeTypeMap.getSingleton () .getMimeTypeFromExtension (mimeTypeMap); return mimeType;}
Sushant Bhatnagar

13
Và nếu tập tin không có phần mở rộng tốt? một người có thể tạo một .mp3 và nó chứa văn bản
throrin19

2
Sau đó, bạn cần thực sự mở tệp và kiểm tra số ma thuật (tùy thuộc vào định dạng ofc) trong phần dẫn - tuy nhiên, điều này cũng giả sử rằng người đổi tên tệp txt thành mp3 không chỉ ghi ID3vào bắt đầu văn bản của anh ấy để gây rối với bạn thậm chí nhiều hơn.
Jens

1
Nếu tập tin có phần mở rộng không xác định. Làm phương thức trở lại */*?

3
Nếu đường dẫn tệp của bạn là / Storage / giả lập / 0 / Tải xuống / hình ảnh (4) .jpg và bạn yêu cầu bắt chước, nó sẽ trả về null.
Kalaiselvan

165

Phát hiện loại mime của bất kỳ tập tin

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
Đây phải là câu trả lời chính xác. toLowerCase()đã lừa
Rajat Saxena

1
Đây là câu trả lời tốt nhất nhưng nó thất bại thảm hại nếu tên tệp có một ký tự đặc biệt, trong trường hợp của tôi là một apostrophe! Ví dụ. tên tệp = Don't go baby.mp3. Bên PatternMatchertrong MimeTypeMap.getFileExtensionFromUrl()không thể xử lý tên tệp và trả về Chuỗi rỗng; null đi ra là chuỗi mimetype!
sud007

Có một giải pháp tương tự nhưng không có lỗi bên dưới bởi I. ShvedenenkoWorked cho các vấn đề tôi đã chỉ ra ở trên. Nhưng câu trả lời này là một con trỏ theo đúng hướng.
sud007

mã này trả về null với Chuỗi "/ lưu trữ / mô phỏng / 0 / dcim / ảnh chụp màn hình / ảnh chụp màn hình_20190319-123828_ubl kỹ thuật số app.jpg".
Abdul

@Abdul Đó là vì đường dẫn đó không có sơ đồ Uri. Nó nên bắt đầu bằng file://hoặc content://.
HB.

33

Giải pháp MimeTypeMap ở trên trả về null trong cách sử dụng của tôi. Điều này hoạt động, và dễ dàng hơn:

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

19
Phương pháp này cũng có thể trả về null.
Smith

Có vẻ như nó có thể trả về null hoặc không, theo URI. Không ai có thể biết tại sao ;-(
Thomas Decaux

10
Nếu phương tiện được chọn từ thư viện Android thì TYPE được trả về. Nếu được chọn từ Trình quản lý tệp thì null được trả về.
Rahul Rastogi

Tôi có thể xác nhận một cách tích cực những gì Rahul nói, chỉ cần kiểm tra và anh ấy đã đúng
Chris

Trong một số thiết bị nếu tôi chọn hình ảnh từ thư viện thì nó cũng trả về null
Ghanshyam Nayma

21

Phiên bản tối ưu hóa câu trả lời của Jens với loại không an toàn và loại dự phòng.

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

Quan trọng : getFileExtensionFromUrl () chỉ hoạt động với chữ thường !


Cập nhật (19.03.2018)

Phần thưởng: Các phương thức trên như một chức năng mở rộng Kotlin ít dài dòng hơn :

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

cái này hiệu quả Mặc dù hơi quá dài cho ý thích của tôi mặc dù.
filthy_wizard 16/03/18

Tất nhiên điều này có thể được viết trong một cách ngắn hơn. Với Kotlin có lẽ chỉ có hai hoặc ba dòng, tuy nhiên con cáo là về sự an toàn và toLoverCasemột phần.
Tobias

@filthy_wizard, đã thêm một phiên bản tối ưu hóa dành riêng cho bạn ;-)
Tobias

Đối với tôi, sử dụng phương thức getPath () thay vì toString () thì rõ ràng hơn và chỉ cần sử dụng cú pháp truy cập thuộc tính kotlin.
Leonid

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
Hoạt động hoàn hảo cho tôi! Nhưng làm thế nào về việc sử dụng FilenameUtils.getExetension (đường dẫn) để có được phần mở rộng tập tin?
peterb

7

Đặc biệt chú ý đến giải pháp của umerk44 ở trên. gọi và là CASE SENSITIVE. Tôi đã dành một buổi chiều về điều này sau đó xem xét kỹ hơn - sẽ trở lại nếu bạn vượt qua "JPG" trong khi nó sẽ trả về "hình ảnh / jpeg" nếu bạn vượt qua "jpg".getMimeTypeFromExtensionguessMimeTypeTypeFromExtensiongetMimeTypeFromExtensionNULL


5

Đây là giải pháp mà tôi đã sử dụng trong ứng dụng Android của mình:

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? Rất nhiều url không có phần mở rộng. Ví dụ trang này không có phần mở rộng. Đối với url, bạn nên sử dụng URL mới (url) .openConnection (). GetRequestProperty ("Kiểu nội dung");
barwnikk

5

Đôi khi câu trả lời của Jeb và Jens không hoạt động và trả về null. Trong trường hợp này tôi sử dụng theo giải pháp. Đầu tệp thường chứa chữ ký loại. Tôi đọc nó và so sánh với được biết trong danh sách chữ ký .

/**
 *
 * @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;
}

signatureIdlà một chỉ số của chữ ký trong mảng chữ ký. Ví dụ,

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

Bây giờ tôi có loại tệp ngay cả khi URI của tệp không có. Tiếp theo tôi nhận được loại mime theo loại tập tin. Nếu bạn không biết loại mime nào sẽ nhận được, bạn có thể tìm thấy thích hợp trong bảng này .

Nó hoạt động cho rất nhiều loại tập tin. Nhưng đối với video thì nó không hoạt động, bởi vì bạn cần phải biết codec video để có được loại mime. Để có được loại mime của video, tôi sử dụng MediaMetadataRetriever .


4

Tôi đã cố gắng sử dụng các phương pháp tiêu chuẩn để xác định loại mime, nhưng tôi không thể giữ lại phần mở rộng tập tin bằng cách sử dụng MimeTypeMap.getFileExtensionFromUrl(uri.getPath()). Phương thức này trả về cho tôi một chuỗi rỗng. Vì vậy, tôi đã thực hiện một giải pháp không tầm thường để giữ lại phần mở rộng tập tin.

Đây là phương thức trả về phần mở rộng tập tin:

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

Và đã giữ lại phần mở rộng tập tin, có thể lấy loại mime như dưới đây:

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

Man, điều này đóng đinh tất cả các câu trả lời được đăng ở đây về vấn đề này! Tôi đã có cùng một vấn đề với tất cả các lớp Legacy. Vấn đề giống như bạn đã đề cập, đã MimeTypeMap.getFileExtensionFromUrltrả về chuỗi trống cho Tên tệp có các ký tự không hợp lệ theo triển khai nội bộ của a PatternMatcher. Điều này làm việc cho tôi hoàn toàn! Yêu nó, không có vấn đề cho đến nay!
sud007

@TÔI. Shvedenenko String extension = file.getName().split("\\.")[1]cũng đã làm việc, do đó, loại bỏ phương thức getExtension ().
Shahood ul Hassan

Nhưng vấn đề là, nếu một phần mở rộng sai được sử dụng trong khi tạo tệp thì sao? Có nên gia hạn là thẩm phán duy nhất của loại mime?
Shahood ul Hassan

2

MimeTypeMapcó thể không nhận ra một số phần mở rộng tệp như flv, mpeg, 3gpp, cpp. Vì vậy, bạn cần nghĩ cách mở rộng MimeTypeMap để duy trì mã của mình. Đây là một ví dụ như vậy.

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

Thêm vào đó, đây là một danh sách đầy đủ các loại mime

http: //www.sitepoint.com/web-foundations/mime-types-complete-list/


2

Dành cho Xamarin Android (Từ câu trả lời của @ HoaLe ở trên)

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

Trong khi từ tài sản / tệp (Lưu ý rằng một vài trường hợp bị thiếu trong MimeTypeMap).

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

Trong khi sử dụng ContentResolver

contentResolver.getType(uri)

Trong khi yêu cầu 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);
}

Vui lòng cung cấp một số giải thích. Nó sẽ giúp người đọc ban đầu điều chỉnh mã của cô ấy và người đọc tiếp theo để có được giá trị cao nhất từ ​​câu trả lời của bạn.
Aurélien B

Cám ơn phản hồi của bạn. Tôi chỉnh sửa nó với lời giải thích.
iamdhariot

1

Tôi phải đối mặt với vấn đề tương tự. Cho đến nay tôi biết kết quả có thể khác nhau cho các tên khác nhau, vì vậy cuối cùng đã đến với giải pháp này.

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

Giải pháp trên đã trả về null trong trường hợp tệp .rar, sử dụng URLConnection.guessContentTypeFromName (url) hoạt động trong trường hợp này.


0

mime từ tập tin địa phương:

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

0

bạn có nhiều lựa chọn để mở rộng tập tin: như: 1- String filename = uri.getLastPathSegment();xem liên kết này

2-bạn cũng có thể sử dụng mã này

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

nhưng điều này không tốt 3-nếu bạn có URI của tệp thì hãy sử dụng Mã này

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

4-nếu bạn có URL thì hãy sử dụng mã này:

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


  type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }

return type;
}

thưởng thức mã của bạn :)


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

Cũng đã trả về giá trị null trong đường dẫn trường hợp của tôi là

/ lưu trữ / giả lập / 0 / Âm nhạc / 01 - Ghost trên sàn nhảy.mp3

như công việc xung quanh sử dụng

val url = inUrl.replace ("", "")

vì vậy phương pháp trông giống như

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

kết quả là nó trả về kết quả thành công:

âm thanh / mpeg

Hy vọng nó sẽ giúp được ai


0

Không có câu trả lời nào ở đây là hoàn hảo. Dưới đây là câu trả lời kết hợp các yếu tố tốt nhất của tất cả các câu trả lời hàng đầu:

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

Tôi không nhận ra tại sao MimeTypeMap.getFileExtensionFromUrl()có vấn đề với spaces và một số ký tự khác, điều đó trả về "", nhưng tôi chỉ viết phương thức này để thay đổi tên tệp thành tên có thể thừa nhận. Nó chỉ chơi với Strings. Tuy nhiên, đó là loại công trình. Thông qua phương thức, các spaces hiện có trong tên tệp được biến thành một ký tự mong muốn (mà ở đây là "x") thông qua replaceAll(" ", "x")và các ký tự không phù hợp khác được chuyển thành một ký tự phù hợp thông qua URLEncoder. vì vậy cách sử dụng (theo các mã được trình bày trong câu hỏi và câu trả lời được chọn) nên giống như vậy 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;
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.