diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index 65972964b..9352edb9d 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -58,6 +58,7 @@
2.12.2
3.8.0
0.1.55
+ 2.4.1
8.2.2
4.5.25
@@ -480,6 +481,12 @@
${easyexcel.verion}
+
+ org.apache.tika
+ tika-core
+ ${tika-core.version}
+
+
org.apache.velocity
velocity-engine-core
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
index 63732f1b3..89fab2da2 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
@@ -58,4 +58,8 @@ public class FileUtils {
return file;
}
+
+ public static void main(String[] args) {
+ }
+
}
diff --git a/yudao-framework/yudao-spring-boot-starter-file/pom.xml b/yudao-framework/yudao-spring-boot-starter-file/pom.xml
index 72eafba58..5ce48a857 100644
--- a/yudao-framework/yudao-spring-boot-starter-file/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-file/pom.xml
@@ -61,6 +61,11 @@
jsch
+
+ org.apache.tika
+ tika-core
+
+
io.minio
diff --git a/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/utils/FileTypeUtils.java b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/utils/FileTypeUtils.java
new file mode 100644
index 000000000..d21b4879a
--- /dev/null
+++ b/yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/utils/FileTypeUtils.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.framework.file.core.utils;
+
+import com.alibaba.ttl.TransmittableThreadLocal;
+import lombok.SneakyThrows;
+import org.apache.tika.Tika;
+
+import java.io.ByteArrayInputStream;
+
+/**
+ * 文件类型 Utils
+ *
+ * @author 芋道源码
+ */
+public class FileTypeUtils {
+
+ private static final ThreadLocal TIKA = TransmittableThreadLocal.withInitial(Tika::new);
+
+ /**
+ * 获得文件的 mineType
+ *
+ * @param data 文件内容
+ * @return mineType
+ */
+ @SneakyThrows
+ public static String getMineType(byte[] data) {
+ return TIKA.get().detect(new ByteArrayInputStream(data));
+ }
+
+}
diff --git a/yudao-module-infra/yudao-module-infra-biz/pom.xml b/yudao-module-infra/yudao-module-infra-biz/pom.xml
index c51de3725..e06eebb54 100644
--- a/yudao-module-infra/yudao-module-infra-biz/pom.xml
+++ b/yudao-module-infra/yudao-module-infra-biz/pom.xml
@@ -119,7 +119,6 @@
cn.iocoder.boot
yudao-spring-boot-starter-file
-
diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
index b90e92752..98af005f7 100644
--- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
+++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java
@@ -1,11 +1,11 @@
package cn.iocoder.yudao.module.infra.service.file;
-import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.file.core.client.FileClient;
+import cn.iocoder.yudao.framework.file.core.utils.FileTypeUtils;
import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FilePageReqVO;
import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileDO;
import cn.iocoder.yudao.module.infra.dal.mysql.file.FileMapper;
@@ -13,7 +13,6 @@ import lombok.SneakyThrows;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
-import java.io.ByteArrayInputStream;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.FILE_NOT_EXISTS;
@@ -41,9 +40,10 @@ public class FileServiceImpl implements FileService {
@SneakyThrows
public String createFile(String name, String path, byte[] content) {
// 计算默认的 path 名
- String type = FileTypeUtil.getType(new ByteArrayInputStream(content), name);
+ String type = FileTypeUtils.getMineType(content);
if (StrUtil.isEmpty(path)) {
- path = DigestUtil.md5Hex(content) + '.' + type;
+ path = DigestUtil.md5Hex(content)
+ + '.' + StrUtil.subAfter(type, '/', true); // 文件的后缀
}
// 如果 name 为空,则使用 path 填充
if (StrUtil.isEmpty(name)) {