ContentType枚举类

331 阅读3分钟

需求

创建一个ContentType枚举,在文件上传下载功能中判断类型、设置Headers等

实现

public enum ContentTypeEnum {

    AAC("acc","AAC音频","audio/aac"),
    ABW("abw","AbiWord文件","application/x-abiword"),
    ARC("arc","存档文档","application/x-freearc"),
    AVIF("avif","AVIF图像","image/avif"),
    AVI("avi","AVI:音频视频交错格式","video/x-msvideo"),
    AZW("azw","亚马逊Kindle电子书格式","application/vnd.amazon.ebook"),
    BIN("bin","任何类型的二进制数据","application/octet-stream"),
    BMP("bmp","Windows OS/2位图图形","image/bmp"),
    BZ("bz","BZip 存档","application/x-bzip"),
    BZ2("bz2","BZip2 存档","application/x-bzip2"),
    CSH("csh","C-Shell脚本","application/x-csh"),
    CSS("css","级联样式表(CSS)","text/css"),
    CSV("csv","逗号分隔值(CSV)","text/csv"),
    DOC("doc","微软Word","application/msword"),
    DOCX("docx","微软Word(OpenXML)","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),
    EOT("eot","MS 嵌入式 OpenType字体","application/vnd.ms-fontobject"),
    EPUB("epub","电子出版物(EPUB)","application/epub+zip"),
    GZ("gz","GZip 压缩存档","application/gzip"),
    GIF("gif","图形交换格式(GIF)","image/gif"),
    HTM("htm","超文本标记语言(HTML)","text/html"),
    HTML("html","超文本标记语言(HTML)","text/html"),
    ICO("ico","图标格式","image/vnd.microsoft.icon"),
    ICS("ics","iCalendar格式","text/calendar"),
    JAR("jar","Java存档(JAR)","application/java-archive"),
    JPEG("jpeg","JPEG 图片","image/jpeg"),
    JPG("jpg","JPEG 图片","image/jpeg"),
    JS("js","JavaScript","text/javascript"),
    JSON("json","JSON格式","application/json"),
    JSONLD("jsonld","JSON-LD格式","application/ld+json"),
    MID("mid","乐器数字接口(MIDI)","audio/midi"),
    MIDI("midi","乐器数字接口(MIDI)","audio/midi"),
    MJS("mjs","JavaScript模块","text/javascript"),
    MP3("mp3","MP3音频","audio/mpeg"),
    MP4("mp4","MP4视频","audio/mp4"),
    MPEG("mpeg","MPEG视频","video/mpeg"),
    MPKG("mpkg","苹果安装包","application/vnd.apple.installer+xml"),
    ODP("odp","OpenDocument 演示文稿","application/vnd.oasis.opendocument.presentation"),
    ODS("ods","OpenDocument 电子表格","application/vnd.oasis.opendocument.spreadsheet"),
    ODT("odt","OpenDocument 文字文档","application/vnd.oasis.opendocument.text"),
    OGA("oga","OGG音频","audio/ogg"),
    OGV("ogv","OGG视频","video/ogg"),
    OGX("ogx","OGG","application/ogg"),
    OPUS("opus","OPUS音频","audio/opus"),
    OTF("otf","OpenType字体","font/otf"),
    PNG("png","便携式网络图形","image/png"),
    PDF("pdf","Adobe便携式文档格式(PDF)","application/pdf"),
    PHP("php","超文本预处理器","application/x-httpd-php"),
    PPT("ppt","微软 PowerPoint","application/vnd.ms-powerpoint"),
    PPTX("pptx","微软 PowerPoint(OpenXML)","application/vnd.openxmlformats-officedocument.presentationml.presentation"),
    RAR("rar","RAR压缩包","application/vnd.rar"),
    RTF("rtf","富文本格式(RTF)","application/rtf"),
    SH("sh","Bourne Shell脚本","application/x-sh"),
    SVG("svg","可缩放矢量图形(SVG)","image/svg+xml"),
    SWF("swf","小型Web格式(SWF)或Adobe Flash文档","application/x-shockwave-flash"),
    TAR("tar","磁带存档(TAR)","application/x-tar"),
    TIF("tif","标记图像文件格式(TIFF)","image/tiff"),
    TIFF("tiff","标记图像文件格式(TIFF)","image/tiff"),
    TS("ts","MPEG传输流","video/mp2t"),
    TTF("ttf","ttf标准字体","font/ttf"),
    TXT("txt","文本(通常为ASCII或ISO 8859 -n","text/plain"),
    VSD("vsd","微软Visio","application/vnd.visio"),
    WAV("wav","波形音频格式","audio/wav"),
    WEBA("weba","WEBM音频","audio/webm"),
    WEBM("webm","WEBM视频","video/webm"),
    WEBP("webp","WEBP图像","image/webp"),
    WOFF("woff","Web开放字体格式(WOFF)","font/woff"),
    WOFF2("woff2","Web开放字体格式(WOFF)","font/woff2"),
    XHTML("xhtml","XHTML","application/xhtml+xml"),
    XLS("xls","微软 Excel","application/vnd.ms-excel"),
    XLSX("xlsx","微软 Excel(OpenXML)","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
    XML("xml","XML","application/xml"),
    XUL("xul","XUL","application/vnd.mozilla.xul+xml"),
    ZIP("zip","ZIP压缩包","application/zip"),
    MIME_3GP("3gp", "3GPP 音频/视频容器", "video/3gpp"),
    MIME_3GP_WITHOUT_VIDEO("3gp", "3GPP 音频/视频容器 不包含视频", "audio/3gpp2"),
    MIME_3G2("3g2", "3GPP2 音频/视频容器", "video/3gpp2"),
    MIME_3G2_WITHOUT_VIDEO("3g2", "3GPP2 音频/视频容器 不包含视频", "audio/3gpp2"),
    MIME_7Z("7z","7-zip存档","application/x-7z-compressed")

    ;

    /**
     * 扩展名
     */
    private final String extension;

    /**
     * 文字说明
     */
    private final String explain;

    /**
     * 类型
     */
    private final String contentType;

    ContentTypeEnum(String extension, String explain, String contentType){
        this.extension = extension;
        this.explain = explain;
        this.contentType = contentType;
    }

    public String getExtension() {
        return extension;
    }

    public String getExplain() {
        return explain;
    }

    public String getContentType() {
        return contentType;
    }

    /**
     * 根据扩展名获取枚举
     * @param extension
     * @return
     */
    public static ContentTypeEnum findByExtension(String extension) {
        if (StringUtils.isBlank(extension)) {
            return null;
        }
        for (ContentTypeEnum contentTypeEnum : ContentTypeEnum.values()) {
            if (extension.equals(contentTypeEnum.getExtension())) {
                return contentTypeEnum;
            }
        }
        return null;
    }

    /**
     * 根据类型获取枚举
     * @param contentType
     * @return
     */
    public static ContentTypeEnum findByType(String contentType) {
        if (StringUtils.isBlank(contentType)) {
            return null;
        }
        for (ContentTypeEnum contentTypeEnum : ContentTypeEnum.values()) {
            if (contentType.equals(contentTypeEnum.getContentType())) {
                return contentTypeEnum;
            }
        }
        return null;
    }

    /**
     * 根据扩展获取类型
     * @param extension
     * @return
     */
    public static String getTypeByExt(String extension) {
        ContentTypeEnum contentTypeEnum = findByExtension(extension);
        if (Objects.nonNull(contentTypeEnum)) {
            return contentTypeEnum.getContentType();
        }
        return "application/octet-stream";
    }
}

数据来源

developer.mozilla.org/en-US/docs/…