| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package com.xjrsoft.config;
- import lombok.Getter;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.Set;
- /**
- * 文件校验规则配置(优化版)
- */
- @Getter
- public final class FileCheckRuleConfig {
- /* ========== 基础类型规则 ========== */
- /**
- * 图片规则(严格模式)
- */
- public static final FileCheckRuleConfig IMAGE = builder()
- .withExtensions("jpg", "jpeg", "png", "gif", "webp", "bmp")
- .withMimeTypes(
- "image/jpeg",
- "image/png",
- "image/gif",
- "image/webp",
- "image/bmp"
- )
- .build();
- /**
- * 视频规则
- */
- public static final FileCheckRuleConfig VIDEO = builder()
- .withExtensions("mp4", "mov", "avi", "wmv", "flv", "mkv")
- .withMimeTypes(
- "video/mp4",
- "video/quicktime",
- "video/x-msvideo",
- "video/x-ms-wmv",
- "video/x-flv",
- "video/x-matroska"
- )
- .build();
- /**
- * 音频规则
- */
- public static final FileCheckRuleConfig AUDIO = builder()
- .withExtensions("mp3", "wav", "aac", "flac", "ogg", "m4a")
- .withMimeTypes(
- "audio/mpeg",
- "audio/wav",
- "audio/aac",
- "audio/flac",
- "audio/ogg",
- "audio/x-m4a"
- )
- .build();
- /**
- * 文档规则
- */
- public static final FileCheckRuleConfig DOCUMENT = builder()
- .withExtensions("pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt")
- .withMimeTypes(
- "application/pdf",
- "application/msword",
- "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- "application/vnd.ms-excel",
- "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
- "application/vnd.ms-powerpoint",
- "application/vnd.openxmlformats-officedocument.presentationml.presentation",
- "text/plain"
- )
- .build();
- /* ========== 组合类型规则 ========== */
- /**
- * 媒体规则(图片+视频)
- */
- public static final FileCheckRuleConfig MEDIA = combine(IMAGE, VIDEO);
- /**
- * 图片和文档规则
- */
- public static final FileCheckRuleConfig IMAGE_AND_DOCUMENT = combine(IMAGE, DOCUMENT);
- /**
- * 所有类型规则
- */
- public static final FileCheckRuleConfig ALL = combine(IMAGE, VIDEO, AUDIO, DOCUMENT);
- private final Set<String> allowedExtensions;
- private final Set<String> allowedMimeTypes;
- private FileCheckRuleConfig(Builder builder) {
- this.allowedExtensions = Collections.unmodifiableSet(builder.extensions);
- this.allowedMimeTypes = Collections.unmodifiableSet(builder.mimeTypes);
- }
- /**
- * 创建新的构建器
- */
- public static Builder builder() {
- return new Builder();
- }
- /**
- * 合并多个规则配置
- */
- public static FileCheckRuleConfig combine(FileCheckRuleConfig... configs) {
- Builder builder = builder();
- for (FileCheckRuleConfig config : configs) {
- builder.extensions.addAll(config.allowedExtensions);
- builder.mimeTypes.addAll(config.allowedMimeTypes);
- }
- return builder.build();
- }
- /**
- * 构建器类
- */
- public static final class Builder {
- private final Set<String> extensions = new HashSet<>();
- private final Set<String> mimeTypes = new HashSet<>();
- private Builder() {
- }
- public Builder withExtensions(String... extensions) {
- this.extensions.addAll(Arrays.asList(extensions));
- return this;
- }
- public Builder withMimeTypes(String... mimeTypes) {
- this.mimeTypes.addAll(Arrays.asList(mimeTypes));
- return this;
- }
- public Builder addExtension(String extension) {
- this.extensions.add(extension);
- return this;
- }
- public Builder addMimeType(String mimeType) {
- this.mimeTypes.add(mimeType);
- return this;
- }
- public Builder from(FileCheckRuleConfig config) {
- this.extensions.addAll(config.allowedExtensions);
- this.mimeTypes.addAll(config.allowedMimeTypes);
- return this;
- }
- public FileCheckRuleConfig build() {
- return new FileCheckRuleConfig(this);
- }
- }
- }
|