zhangherong
2025-07-01 02ae7138146e6964c4b5875930cbb8896ad840fc
lxzn-boot-base-core/src/main/java/org/jeecg/common/util/FileUtil.java
@@ -1,5 +1,7 @@
package org.jeecg.common.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.FileUploadResult;
import org.jeecg.common.exception.ExceptionCast;
import org.springframework.beans.factory.annotation.Value;
@@ -9,11 +11,14 @@
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class FileUtil {
   private static String fileUploadFolder;
@@ -60,6 +65,43 @@
      return dto;
   }
   public static FileUploadResult uploadFile(byte[] fileData, String fileName) {
      String suffix = getFileSuffix(fileName);
      Date currentDate = DateUtils.getDate();
      String monthStr = DateUtils.date2Str(currentDate, DateUtils.monthFormat.get());
      // 相对路径
      String relativePath = "/" + monthStr + "/" + DateUtils.getDayStr(currentDate) + "/";
      // 绝对路径
      String absolutePath = fileUploadFolder + "/" + monthStr + "/" + DateUtils.getDayStr(currentDate) + "/";
      String fileNameNonSuffix = getFilenameNonSuffix(fileName);
      if (StringUtils.isBlank(fileNameNonSuffix)) {
         return null;
      }
      // 获取文件加密名称 1 保证文件唯一 不存在覆盖问题 2 目录下保存文件加密名称 去除文件关键信息
      String encodeFileName = SHA256Util.getSHA256Str(fileNameNonSuffix + System.currentTimeMillis()) + "." + suffix;
      Long fileSize = (long) fileData.length;
      try {
         File targetFile = new File(absolutePath, encodeFileName);
         if(!targetFile.getParentFile().exists()) {
            //创建目录
            targetFile.getParentFile().mkdirs();
         }
         Files.write(Paths.get(absolutePath + encodeFileName), fileData);
         FileUploadResult dto = new FileUploadResult();
         dto.setFileName(fileNameNonSuffix);
         dto.setFileEncodeName(encodeFileName);
         dto.setFilePath(relativePath + encodeFileName);
         dto.setFileSize(fileSize);
         dto.setFileSuffix(suffix);
         return dto;
      } catch (IOException e) {
         log.error("文件写入失败: {}", e.getMessage(), e);
         return null;
      }
   }
   /**
    * @param filePath 路径
    * @param fileName 文件名
@@ -115,6 +157,49 @@
      }
   }
   public static void downLoadFile(HttpServletResponse response, String filePath, String toFileName) {
      String absolutePath = fileUploadFolder + filePath;
      File file = new File(absolutePath);
      if (file.exists()) {
         byte[] buffer = new byte[1024];
         FileInputStream fis = null;
         BufferedInputStream bis = null;
         try {
            response.setHeader("Content-Type", "application/octet-stream;charset=utf-8"); // 告诉浏览器输出内容为流
            // response.setHeader("Content-Disposition", "attachment;fileName="+ new
            // String(toFileName.getBytes("UTF-8"),"ISO-8859-1"));
            response.setHeader("Content-Disposition",
                  "attachment;fileName=" + URLEncoder.encode(toFileName, "UTF-8"));
            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);
            OutputStream os = response.getOutputStream();
            int i = bis.read(buffer);
            while (i != -1) {
               os.write(buffer, 0, i);
               i = bis.read(buffer);
            }
            os.flush();
         } catch (Exception e) {
            e.printStackTrace();
         } finally {
            if (bis != null) {
               try {
                  bis.close();
               } catch (IOException e) {
               }
            }
            if (fis != null) {
               try {
                  fis.close();
               } catch (IOException e) {
               }
            }
         }
      } else {
         ExceptionCast.cast("文件不存在");
      }
   }
   /**
    * 上传文件工具类
    *