zhangherong
2025-04-01 92bd9ed78ad1da026b81fcd8e88445b6834bba76
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,10 +11,13 @@
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;
@Slf4j
@Component
public class FileUtil {
@@ -46,7 +51,7 @@
      if (fileNameNonSuffix == null)
         return null;
      // 获取文件加密名称 1 保证文件唯一 不存在覆盖问题 2 目录下保存文件加密名称 去除文件关键信息
      String encodeFileName = SHA256Util.getSHA256Str(fileNameNonSuffix + System.currentTimeMillis());
      String encodeFileName = SHA256Util.getSHA256Str(fileNameNonSuffix + System.currentTimeMillis()) + "." + suffix;
      Long fileSize = file.getSize();
      boolean b = uploadFile(file, absolutePath, encodeFileName);
      if (!b)
@@ -54,10 +59,46 @@
      FileUploadResult dto = new FileUploadResult();
      dto.setFileName(fileNameNonSuffix);
      dto.setFileEncodeName(encodeFileName);
      dto.setFilePath(relativePath);
      dto.setFilePath(relativePath + encodeFileName);
      dto.setFileSize(fileSize);
      dto.setFileSuffix(suffix);
      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;
        }
   }
   /**
@@ -67,9 +108,7 @@
   public static void deleteFile(String filePath, String fileName) {
      String absolutePath = fileUploadFolder + "/" + filePath + "/";
      File targetFile = new File(absolutePath, fileName);
      if (null != targetFile && targetFile.isFile()) {
         targetFile.delete();
      }
      targetFile.deleteOnExit();
   }
   public static void downLoadFile(HttpServletResponse response, String fileName, String filePath, String toFileName) {
@@ -115,6 +154,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("文件不存在");
      }
   }
   /**
    * 上传文件工具类
    *