beanList) {
+ Object o = JSON.toJSON(beanList);
+ return (JSONArray) o;
+ }
+
+
+ }
+
diff --git a/bonus-common/src/main/java/com/bonus/common/utils/file/FileTypeUtils.java b/bonus-common/src/main/java/com/bonus/common/utils/file/FileTypeUtils.java
index 11ebbc3..ded162b 100644
--- a/bonus-common/src/main/java/com/bonus/common/utils/file/FileTypeUtils.java
+++ b/bonus-common/src/main/java/com/bonus/common/utils/file/FileTypeUtils.java
@@ -1,7 +1,11 @@
package com.bonus.common.utils.file;
import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
/**
* 文件类型工具类
@@ -10,6 +14,35 @@ import org.apache.commons.lang3.StringUtils;
*/
public class FileTypeUtils
{
+
+ // 常见视频文件的文件头(十六进制)
+ private static final String[] VIDEO_HEADER_PREFIXES = {
+ "000001BA", // MPEG
+ "000001B3", // MPEG
+ "66747970", // MP4
+ "464C56", // FLV
+ "494433", // MP3 (音频,可排除)
+ "89504E47", // PNG (图片)
+ "47494638", // GIF
+ "25504446", // PDF
+ "FFD8FFE0", // JPEG
+ "52494646", // WebP / AVI (RIFF 容器)
+ "4D5A" // EXE (危险文件)
+ };
+
+ // 真正的视频 MIME 类型
+ private static final String[] VIDEO_CONTENT_TYPES = {
+ "video/mp4",
+ "video/avi",
+ "video/x-msvideo",
+ "video/mpeg",
+ "video/quicktime",
+ "video/x-flv",
+ "video/webm",
+ "video/3gpp",
+ "video/ogg"
+ };
+
/**
* 获取文件类型
*
@@ -73,4 +106,72 @@ public class FileTypeUtils
}
return strFileExtendName;
}
+
+ /**
+ * 判断 MultipartFile 是否为视频文件(Java 8 兼容版)
+ */
+ public static boolean isVideoFile(MultipartFile file) {
+ if (file == null || file.isEmpty()) {
+ return false;
+ }
+ String contentType = file.getContentType();
+ if (contentType == null) {
+ return false;
+ }
+ // 先用 MIME 类型快速判断(备用方案)
+ boolean isVideoByMimeType = Arrays.stream(VIDEO_CONTENT_TYPES)
+ .anyMatch(contentType::startsWith);
+ try {
+ byte[] headerBytes = new byte[12];
+ int read = file.getInputStream().read(headerBytes);
+ if (read < 4) {
+ return false;
+ }
+ String headerHex = bytesToHex(headerBytes, Math.min(read, 8)).toUpperCase();
+ boolean isVideo = false; // 用一个变量保存结果
+ switch (headerHex) {
+ case "66747970": // MP4
+ case "000001BA": // MPEG
+ case "000001B3": // MPEG
+ case "464C56": // FLV
+ isVideo = true;
+ break;
+ case "52494646": // RIFF (AVI, WebM)
+ // 进一步判断子类型:AVI 或 WebM
+ if (read >= 12) {
+ String subType = bytesToHex(Arrays.copyOfRange(headerBytes, 8, 12)).toUpperCase();
+ isVideo = "41564920".equals(subType) || "5745424D".equals(subType); // "AVI " 或 "WEBM"
+ }
+ break;
+
+ default:
+ // 文件头不匹配,降级使用 MIME 类型判断
+ isVideo = isVideoByMimeType;
+ break;
+ }
+ return isVideo;
+ } catch (IOException e) {
+ // 读取出错,降级使用 MIME 类型判断
+ return isVideoByMimeType;
+ }
+ }
+
+ /**
+ * 将字节数组转为十六进制字符串
+ */
+ private static String bytesToHex(byte[] bytes, int len) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < len; i++) {
+ sb.append(String.format("%02X", bytes[i] & 0xFF));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * 获取字节数组的十六进制表示(完整)
+ */
+ private static String bytesToHex(byte[] bytes) {
+ return bytesToHex(bytes, bytes.length);
+ }
+
}
\ No newline at end of file
diff --git a/bonus-file/src/main/java/com/bonus/file/service/FileUploadService.java b/bonus-file/src/main/java/com/bonus/file/service/FileUploadService.java
index a6f4576..1843dd8 100644
--- a/bonus-file/src/main/java/com/bonus/file/service/FileUploadService.java
+++ b/bonus-file/src/main/java/com/bonus/file/service/FileUploadService.java
@@ -41,14 +41,30 @@ public class FileUploadService {
* @param filePath
*/
public void delFile(String filePath) {
- try{
- boolean isCz=minioUtil.isObjectExist(minioConfig.getBucketName(),filePath);
- if(isCz){
- minioUtil.removeFile(minioConfig.getBucketName(),filePath);
+ try {
+ boolean isCz = minioUtil.isObjectExist(minioConfig.getBucketName(), filePath);
+ if (isCz) {
+ minioUtil.removeFile(minioConfig.getBucketName(), filePath);
}
+ } catch (Exception e) {
+ log.error(e.toString(), e);
+ }
+ }
+
+ /**
+ * 上传文件
+ * @param file
+ * @return
+ */
+ public SysFile uploadLargeFile(MultipartFile file,String path) {
+ try{
+ return minioUtil.uploadFile(file, path);
}catch (Exception e){
log.error(e.toString(),e);
}
-
+ return null;
}
+
+
+
}