Browse Source

优化代码

jiangqiang 2 years ago
parent
commit
2621f2195d

+ 19 - 2
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java

@@ -1,9 +1,14 @@
 package cn.iocoder.yudao.framework.common.util.io;
 
+import cn.hutool.core.io.FileTypeUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.digest.DigestUtil;
 import lombok.SneakyThrows;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 
 /**
@@ -58,8 +63,20 @@ public class FileUtils {
         return file;
     }
 
-
-    public static void main(String[] args) {
+    /**
+     * @param content      文件内容
+     * @param originalName 原始文件名
+     * @return path,唯一不可重复
+     */
+    public static String generatePath(byte[] content, String originalName) {
+        String sha256Hex = DigestUtil.sha256Hex(content);
+        // 如果存在name,则优先使用name的后缀
+        if (StrUtil.isNotBlank(originalName)) {
+            String extName = FileNameUtil.extName(originalName);
+            return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName;
+        } else {
+            return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content));
+        }
     }
 
 }

+ 2 - 2
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/utils/FileTypeUtils.java

@@ -16,7 +16,7 @@ public class FileTypeUtils {
     /**
      * 获得文件的 mineType,对于doc,jar等文件会有误差
      *
-     * @param data 包含文件开头几千个字节的字节数组
+     * @param data 文件内容
      * @return mineType 无法识别时会返回“application/octet-stream”
      */
     @SneakyThrows
@@ -37,7 +37,7 @@ public class FileTypeUtils {
     /**
      * 在拥有文件和数据的情况下,最好使用此方法,最为准确
      *
-     * @param data 包含文件开头几千个字节的字节数组
+     * @param data 文件内容
      * @param name 文件名
      * @return mineType 无法识别时会返回“application/octet-stream”
      */

+ 3 - 12
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java

@@ -1,11 +1,10 @@
 package cn.iocoder.yudao.module.infra.service.file;
 
-import cn.hutool.core.io.FileTypeUtil;
-import cn.hutool.core.io.file.FileNameUtil;
+import cn.hutool.core.io.FileUtil;
 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.common.util.io.FileUtils;
 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;
@@ -15,7 +14,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;
@@ -45,14 +43,7 @@ public class FileServiceImpl implements FileService {
         // 计算默认的 path 名
         String type = FileTypeUtils.getMineType(content, name);
         if (StrUtil.isEmpty(path)) {
-            String sha256Hex = DigestUtil.sha256Hex(content);
-            /*  如果存在name,则优先使用name的后缀 */
-            if (StrUtil.isNotBlank(name)) {
-                String extName = FileNameUtil.extName(name);
-                path = StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName;
-            } else {
-                path = sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content), name);
-            }
+            path = FileUtils.generatePath(content, name);
         }
         // 如果 name 为空,则使用 path 填充
         if (StrUtil.isEmpty(name)) {

+ 1 - 1
yudao-ui-admin/src/views/infra/file/index.vue

@@ -37,7 +37,7 @@
                          :width="'100px'"></image-preview>
           <i v-else>无法预览,点击
             <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
-                     :href="getFileUrl+scope.row.configId+'/get/' + scope.row.path">下载
+                     :href="getFileUrl + scope.row.configId + '/get/' + scope.row.path">下载
             </el-link>
           </i>
         </template>