ImageTypeUtil工具類:Java獲取URL對應的文件類型及其後綴

Java獲取URL對應的文件類型及其後綴的主流方法有三種:

1、根據文件頭部數據來判斷。

通常需要先下載再判斷,但是如果想要在下載的時候確定文件後綴,就做不到了,而且獲取的文件類型不是很準確。

2、使用lastIndexOf去解析url字符串。

這種方法最簡單高效。

3、UrlConnection獲取ContentType的類型推測出文件的類型。

這裏我封裝了一個工具類,將第二種方法和第三種方法結合,但是不是用lastIndexOf,而是判斷url字符串是否包含圖片的後綴。

package johny.utils;

import java.net.URLConnection;

/**
 * @author Johny 林子豪 https://www.zhihu.com/people/linzihao-239
 */
public enum ImageTypeUtil {

    PNG(".png", "image/png"),
    JPG(".jpg", "image/jpeg"),
    BMP(".bmp", "image/bmp"),
    JPEG(".jpeg", "image/jpeg"),
    GIF(".gif", "image/gif"),
    TIF(".tif", "image/tiff"),//標籤圖像文件格式(Tagged Image File Format,簡寫爲TIFF)是一種主要用來存儲包括照片和藝術圖在內的圖像的文件格式。它最初由Aldus公司與微軟公司一起爲PostScript打印開發。
    TIFF(".tiff", "image/tiff"),
    FAX(".fax", "image/fax"),
    ICO(".ico", "image/x-icon"),
    JFIF(".jfif", "image/jpeg"),
    JPE(".jpe", "image/jpeg"),
    NET(".net", "image/pnetvue"),
    WBMP(".wbmp", "image/vnd.wap.wbmp");
    //如果有其他的mime類型,

    /**
     * 後綴名
     */
    final String mSuffix;
    final String mMIME;

    ImageTypeUtil(String suffix, String mime) {
        this.mSuffix = suffix;
        this.mMIME = mime;
    }

    public static String getSuffixFromUrl(String url) {

        for (ImageTypeUtil fileType : values()) {
            if (url.contains(fileType.suffix())) {
                return fileType.suffix();
            }
        }
        String contentType = getMIMETypeFromUrl(url);
        if (contentType == null) return null;
        return mimeMapingSuffix(contentType);
    }

    public static String getMIMETypeFromUrl(String url) {
        if (url == null || url.isEmpty()) {
            return null;
        }
        return URLConnection.guessContentTypeFromName(url);
    }

    /**
     * mime類型對應的後綴名
     */
    public static String mimeMapingSuffix(String mime) {
        for (ImageTypeUtil fileType : values()) {
            if (fileType.mime().equals(mime)) {
                return fileType.suffix();
            }
        }
        return null;
    }

    public String mime() {
        return mMIME;
    }

    /**
     * 獲取後綴名 * * @return 指定類型的後綴名,如'.mp4'
     */
    public String suffix() {
        return this.mSuffix;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章