From 23855599412c4d61b38d78f0f3abd3430a48b5b1 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期三, 25 六月 2025 11:51:38 +0800
Subject: [PATCH] Merge branch 'mdc_hyjs_master'

---
 lxzn-boot-base-core/src/main/java/org/jeecg/common/util/FileUtil.java |  352 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 352 insertions(+), 0 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/FileUtil.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/FileUtil.java
new file mode 100644
index 0000000..10a2842
--- /dev/null
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/FileUtil.java
@@ -0,0 +1,352 @@
+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;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+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 {
+
+	private static String fileUploadFolder;
+
+	@SuppressWarnings("unused")
+	private static String uploadType;
+
+	@Value(value = "${jeecg.path.upload}")
+	public void setFileUploadFolder(String fileUploadFolder) {
+		FileUtil.fileUploadFolder = fileUploadFolder;
+	}
+
+	@Value(value = "${jeecg.uploadType}")
+	public void setUploadType(String uploadType) {
+		FileUtil.uploadType = uploadType;
+	}
+
+	public static FileUploadResult uploadFile(MultipartFile file) {
+		if (file == null || file.isEmpty())
+			return null;
+		String fileName = file.getOriginalFilename();
+		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 (fileNameNonSuffix == null)
+			return null;
+		// 鑾峰彇鏂囦欢鍔犲瘑鍚嶇О 1 淇濊瘉鏂囦欢鍞竴 涓嶅瓨鍦ㄨ鐩栭棶棰� 2 鐩綍涓嬩繚瀛樻枃浠跺姞瀵嗗悕绉� 鍘婚櫎鏂囦欢鍏抽敭淇℃伅
+		String encodeFileName = SHA256Util.getSHA256Str(fileNameNonSuffix + System.currentTimeMillis()) + "." + suffix;
+		Long fileSize = file.getSize();
+		boolean b = uploadFile(file, absolutePath, encodeFileName);
+		if (!b)
+			return null;
+		FileUploadResult dto = new FileUploadResult();
+		dto.setFileName(fileNameNonSuffix);
+		dto.setFileEncodeName(encodeFileName);
+		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;
+        }
+
+	}
+
+	/**
+	 * @param filePath 璺緞
+	 * @param fileName 鏂囦欢鍚�
+	 */
+	public static void deleteFile(String filePath, String fileName) {
+		String absolutePath = fileUploadFolder + "/" + filePath + "/";
+		File targetFile = new File(absolutePath, fileName);
+		targetFile.deleteOnExit();
+	}
+
+	public static void downLoadFile(HttpServletResponse response, String fileName, String filePath, String toFileName) {
+		String absolutePath = fileUploadFolder + filePath;
+		File file = new File(absolutePath, fileName);
+		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("鏂囦欢涓嶅瓨鍦�");
+		}
+	}
+
+	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("鏂囦欢涓嶅瓨鍦�");
+		}
+	}
+
+	/**
+	 * 涓婁紶鏂囦欢宸ュ叿绫�
+	 * 
+	 * @param multipartFile
+	 * @param path
+	 * @param fileNewName   鏂扮殑鏂囦欢鍚�
+	 * @return
+	 */
+	public static boolean uploadFile(MultipartFile multipartFile, String path, String fileNewName) {
+		File targetFile = new File(path, fileNewName);
+		if (!targetFile.getParentFile().exists()) {
+			targetFile.getParentFile().mkdirs();
+		}
+		try {
+			multipartFile.transferTo(targetFile);
+			return true;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		}
+	}
+
+	/**
+	 * 鑾峰彇鏂囦欢鍚庣紑 鏃犲悗缂�鏂囦欢杩斿洖NULL
+	 * 
+	 * @param fileName
+	 * @return
+	 */
+	public static String getFileSuffix(String fileName) {
+		if (fileName.contains(".")) {
+			String suffix = fileName.substring(fileName.lastIndexOf('.') + 1);
+			return suffix;
+		} else {
+			return null;
+		}
+
+	}
+
+	/**
+	 * 鑾峰彇鏂囦欢鍚� 涓嶅甫鍚庣紑鍜岀偣鍙�
+	 * 
+	 * @param fileName
+	 * @return
+	 */
+	public static String getFilenameNonSuffix(String fileName) {
+		if (fileName.contains(".")) {
+			String filename = fileName.substring(0, fileName.lastIndexOf('.'));
+			return filename;
+		} else {
+			return fileName;
+		}
+
+	}
+
+	public static List<String> readFile(String fileEncodeName, String filePath) {
+		String absolutePath = fileUploadFolder + filePath;
+		File file = new File(absolutePath, fileEncodeName);
+		if (!file.exists() || file.isDirectory())
+			return null;
+		String charset = checkFileEncode(file);
+		if (charset == null)
+			return null;
+		List<String> readList = new ArrayList<>();
+		String tempString = null;
+		BufferedReader reader = null;
+		try {
+			reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
+			while ((tempString = reader.readLine()) != null) {
+				readList.add(tempString);
+			}
+			if (readList.isEmpty())
+				return null;
+			return readList;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		} finally {
+			if (reader != null) {
+				try {
+					reader.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+
+	private static String checkFileEncode(File file) {
+		String charset = "GBK";
+		byte[] first3Bytes = new byte[3];
+		BufferedInputStream bis = null;
+		try {
+			boolean checked = false;
+			bis = new BufferedInputStream(new FileInputStream(file));
+			bis.mark(0);
+			int read = bis.read(first3Bytes, 0, 3);
+			if (read == -1)
+				return charset;
+			if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
+				charset = "UTF-16LE";
+				checked = true;
+			} else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1] == (byte) 0xFF) {
+				charset = "UTF-16BE";
+				checked = true;
+			} else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1] == (byte) 0xBB
+					&& first3Bytes[2] == (byte) 0xBF) {
+				charset = "UTF-8";
+				checked = true;
+			}
+			bis.reset();
+			if (!checked) {
+				while ((read = bis.read()) != -1) {
+					if (read >= 0xF0)
+						break;
+					if (0x80 <= read && read <= 0xBF) // 鍗曠嫭鍑虹幇BF浠ヤ笅鐨勶紝涔熺畻鏄疓BK
+						break;
+					if (0xC0 <= read && read <= 0xDF) {
+						read = bis.read();
+						if (0x80 <= read && read <= 0xBF) // 鍙屽瓧鑺� (0xC0 - 0xDF) (0x80 - 0xBF),涔熷彲鑳藉湪GBK缂栫爜鍐吢犅�
+							continue;
+						else
+							break;
+					} else if (0xE0 <= read && read <= 0xEF) {
+						// 涔熸湁鍙兘鍑洪敊锛屼絾鏄嚑鐜囪緝灏�
+						read = bis.read();
+						if (0x80 <= read && read <= 0xBF) {
+							read = bis.read();
+							if (0x80 <= read && read <= 0xBF) {
+								charset = "UTF-8";
+								break;
+							} else
+								break;
+						} else {
+							break;
+						}
+					}
+				}
+			}
+			return charset;
+		} catch (Exception e) {
+			return null;
+		} finally {
+			if (bis != null) {
+				try {
+					bis.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+
+	}
+
+}
\ No newline at end of file

--
Gitblit v1.9.3