FileCheckRuleConfig.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package com.xjrsoft.config;
  2. import lombok.Getter;
  3. import java.util.Arrays;
  4. import java.util.Collections;
  5. import java.util.HashSet;
  6. import java.util.Set;
  7. /**
  8. * 文件校验规则配置(优化版)
  9. */
  10. @Getter
  11. public final class FileCheckRuleConfig {
  12. /* ========== 基础类型规则 ========== */
  13. /**
  14. * 图片规则(严格模式)
  15. */
  16. public static final FileCheckRuleConfig IMAGE = builder()
  17. .withExtensions("jpg", "jpeg", "png", "gif", "webp", "bmp")
  18. .withMimeTypes(
  19. "image/jpeg",
  20. "image/png",
  21. "image/gif",
  22. "image/webp",
  23. "image/bmp"
  24. )
  25. .build();
  26. /**
  27. * 视频规则
  28. */
  29. public static final FileCheckRuleConfig VIDEO = builder()
  30. .withExtensions("mp4", "mov", "avi", "wmv", "flv", "mkv")
  31. .withMimeTypes(
  32. "video/mp4",
  33. "video/quicktime",
  34. "video/x-msvideo",
  35. "video/x-ms-wmv",
  36. "video/x-flv",
  37. "video/x-matroska"
  38. )
  39. .build();
  40. /**
  41. * 音频规则
  42. */
  43. public static final FileCheckRuleConfig AUDIO = builder()
  44. .withExtensions("mp3", "wav", "aac", "flac", "ogg", "m4a")
  45. .withMimeTypes(
  46. "audio/mpeg",
  47. "audio/wav",
  48. "audio/aac",
  49. "audio/flac",
  50. "audio/ogg",
  51. "audio/x-m4a"
  52. )
  53. .build();
  54. /**
  55. * 文档规则
  56. */
  57. public static final FileCheckRuleConfig DOCUMENT = builder()
  58. .withExtensions("pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt")
  59. .withMimeTypes(
  60. "application/pdf",
  61. "application/msword",
  62. "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  63. "application/vnd.ms-excel",
  64. "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  65. "application/vnd.ms-powerpoint",
  66. "application/vnd.openxmlformats-officedocument.presentationml.presentation",
  67. "text/plain"
  68. )
  69. .build();
  70. /* ========== 组合类型规则 ========== */
  71. /**
  72. * 媒体规则(图片+视频)
  73. */
  74. public static final FileCheckRuleConfig MEDIA = combine(IMAGE, VIDEO);
  75. /**
  76. * 图片和文档规则
  77. */
  78. public static final FileCheckRuleConfig IMAGE_AND_DOCUMENT = combine(IMAGE, DOCUMENT);
  79. /**
  80. * 所有类型规则
  81. */
  82. public static final FileCheckRuleConfig ALL = combine(IMAGE, VIDEO, AUDIO, DOCUMENT);
  83. private final Set<String> allowedExtensions;
  84. private final Set<String> allowedMimeTypes;
  85. private FileCheckRuleConfig(Builder builder) {
  86. this.allowedExtensions = Collections.unmodifiableSet(builder.extensions);
  87. this.allowedMimeTypes = Collections.unmodifiableSet(builder.mimeTypes);
  88. }
  89. /**
  90. * 创建新的构建器
  91. */
  92. public static Builder builder() {
  93. return new Builder();
  94. }
  95. /**
  96. * 合并多个规则配置
  97. */
  98. public static FileCheckRuleConfig combine(FileCheckRuleConfig... configs) {
  99. Builder builder = builder();
  100. for (FileCheckRuleConfig config : configs) {
  101. builder.extensions.addAll(config.allowedExtensions);
  102. builder.mimeTypes.addAll(config.allowedMimeTypes);
  103. }
  104. return builder.build();
  105. }
  106. /**
  107. * 构建器类
  108. */
  109. public static final class Builder {
  110. private final Set<String> extensions = new HashSet<>();
  111. private final Set<String> mimeTypes = new HashSet<>();
  112. private Builder() {
  113. }
  114. public Builder withExtensions(String... extensions) {
  115. this.extensions.addAll(Arrays.asList(extensions));
  116. return this;
  117. }
  118. public Builder withMimeTypes(String... mimeTypes) {
  119. this.mimeTypes.addAll(Arrays.asList(mimeTypes));
  120. return this;
  121. }
  122. public Builder addExtension(String extension) {
  123. this.extensions.add(extension);
  124. return this;
  125. }
  126. public Builder addMimeType(String mimeType) {
  127. this.mimeTypes.add(mimeType);
  128. return this;
  129. }
  130. public Builder from(FileCheckRuleConfig config) {
  131. this.extensions.addAll(config.allowedExtensions);
  132. this.mimeTypes.addAll(config.allowedMimeTypes);
  133. return this;
  134. }
  135. public FileCheckRuleConfig build() {
  136. return new FileCheckRuleConfig(this);
  137. }
  138. }
  139. }