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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值