From 30c9299fa9ffc8d3cd51d4a18b4c0b33c3ef8141 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 08 四月 2026 09:36:44 +0800
Subject: [PATCH] 修改
---
src/main/java/com/lxzn/framework/utils/file/FileUtil.java | 269 ++++++++---------------------------------------------
1 files changed, 42 insertions(+), 227 deletions(-)
diff --git a/src/main/java/com/lxzn/framework/utils/file/FileUtil.java b/src/main/java/com/lxzn/framework/utils/file/FileUtil.java
index 979ebf4..e20959e 100644
--- a/src/main/java/com/lxzn/framework/utils/file/FileUtil.java
+++ b/src/main/java/com/lxzn/framework/utils/file/FileUtil.java
@@ -19,7 +19,6 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
-import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -29,11 +28,7 @@
public class FileUtil {
private static String fileUploadFolder;
- private static String fileNcGateway;
- @Value("${fileNcGateway}")
- public void setFileNcGateway(String fileNcGateway) {
- FileUtil.fileNcGateway = fileNcGateway;
- }
+
@Value("${fileHomePath}")
public void setFileUploadFolder(String fileUploadFolder) {
@@ -131,116 +126,28 @@
return true;
}
- /**
- * 澶嶅埗鏂囦欢锛堝甫閲嶈瘯銆佸ぇ灏忔牎楠屽拰MD5鏍¢獙锛岀‘淇濆鍒跺畬鏁存�т笌鍙潬鎬э級
- * 浠� fileUploadFolder 涓嬬殑婧愯矾寰勫鍒跺埌 fileNcGateway 涓嬬殑鐩爣璺緞锛屽彲鎸囧畾鏂扮殑鏂囦欢鎵╁睍鍚�
- * @param lastFile 婧愭枃浠剁殑鐩稿璺緞锛堢浉瀵逛簬 fileUploadFolder锛�
- * @param newFile 鐩爣鏂囦欢鐨勭浉瀵硅矾寰勶紙鐩稿浜� fileNcGateway锛�
- * @param ncFix 锛堝彲閫夛級鐩爣鏂囦欢鐨勬柊鎵╁睍鍚嶏紙涓嶅甫鐐癸紝濡� "txt"锛夛紝浼犲叆 null 鎴栫┖瀛楃涓插垯涓嶄慨鏀瑰師鎵╁睍鍚�
- * @return 澶嶅埗鎴愬姛杩斿洖 true锛屽惁鍒欒繑鍥� false
- */
- public static boolean copyFileUpName(String lastFile, String newFile, String ncFix) {
- // 1. 鏋勫缓婧愭枃浠跺拰鐩爣鏂囦欢鐨勭粷瀵硅矾寰�
- String sourceFilePath = fileUploadFolder + "/" + lastFile;
- String targetFilePath = fileNcGateway + "/" + newFile;
-
- // 2. 濡傛灉鎸囧畾浜嗘柊鐨勬墿灞曞悕锛屽垯闄勫姞鍒扮洰鏍囨枃浠跺悕
+ public static boolean copyFileUpName(String lastFile ,String newFile,String ncFix) {
+ String lastFileReName = fileUploadFolder + "/" + lastFile ;
if (StringUtils.isNotBlank(ncFix)) {
- targetFilePath = targetFilePath + "." + ncFix;
+ newFile = newFile + "." + ncFix;
}
-
- // 3. 鍒涘缓鐩爣鏂囦欢澶�
- File targetFile = new File(targetFilePath);
- File targetParentDir = targetFile.getParentFile();
- if (!targetParentDir.exists() && !targetParentDir.mkdirs()) {
- log.error("鏃犳硶鍒涘缓鐩爣鏂囦欢澶�: {}", targetParentDir.getAbsolutePath());
- return false;
- }
-
- // 4. 鑾峰彇婧愭枃浠堕鏈熷ぇ灏�
- long expectedSize = -1;
- File sourceFile = new File(sourceFilePath);
- if (!sourceFile.exists()) {
- log.error("婧愭枃浠朵笉瀛樺湪: {}", sourceFilePath);
- return false;
+ File toFile = new File(newFile);
+ if (!toFile.getParentFile().exists()) {
+ toFile.mkdirs();
}
try {
- expectedSize = sourceFile.length();
- log.info("鏂囦欢澶嶅埗: 婧�={}, 鐩爣={}, 澶у皬={}瀛楄妭", sourceFilePath, targetFilePath, expectedSize);
- } catch (SecurityException e) {
- log.error("鏃犳硶璁块棶婧愭枃浠�: {}", sourceFilePath, e);
+ long begintime = System.currentTimeMillis(); // 鑾峰彇鎷疯礉鏂囦欢鍓嶇殑绯荤粺鏃堕棿
+ Files.copy(Paths.get(lastFileReName),
+ Paths.get(newFile),
+ StandardCopyOption.REPLACE_EXISTING);
+ long endtime = System.currentTimeMillis(); // 鑾峰彇鏂囦欢鎷疯礉缁撴潫鏃剁殑绯荤粺鏃堕棿
+ System.out.println("鎷疯礉鏂囦欢鎵�娑堣�楃殑鏃堕棿鏄細" + (endtime - begintime) + "姣");
+ return true;
+ }
+ catch (Exception e) {
+ e.printStackTrace();
return false;
}
-
- // 5. 澶嶅埗鎿嶄綔锛堟渶澶氶噸璇�3娆★級
- int maxRetries = 3;
- int attempt = 0;
- boolean copySuccess = false;
-
- while (attempt < maxRetries && !copySuccess) {
- attempt++;
- try {
- log.info("---- 寮�濮嬬{}娆″鍒跺皾璇� ----", attempt);
-
- // 6. 鎵ц澶嶅埗鎿嶄綔锛堜娇鐢∟IO FileChannel浠ユ彁楂樻晥鐜囷級
- long startTime = System.currentTimeMillis();
- try (FileChannel in = new FileInputStream(sourceFilePath).getChannel();
- FileChannel out = new FileOutputStream(targetFilePath).getChannel()) {
- out.transferFrom(in, 0, in.size());
- }
- long endTime = System.currentTimeMillis();
- log.info("鏂囦欢浼犺緭瀹屾垚锛岃�楁椂: {}姣", (endTime - startTime));
-
- // 7. 鏂囦欢澶у皬楠岃瘉
- File copiedFile = new File(targetFilePath);
- long actualSize = copiedFile.length();
-
- if (expectedSize != actualSize) {
- log.warn("澶у皬涓嶄竴鑷�! 棰勬湡: {}B, 瀹為檯: {}B (宸��: {}B)",
- expectedSize, actualSize, Math.abs(actualSize - expectedSize));
- } else {
- log.info("鏂囦欢澶у皬楠岃瘉鎴愬姛: {}B", actualSize);
- copySuccess = true;
- }
-
- // 8. MD5鏍¢獙
- if (copySuccess) {
- String sourceMd5 = calculateMD5(sourceFilePath);
- String targetMd5 = calculateMD5(targetFilePath);
-
- if (!sourceMd5.equals(targetMd5)) {
- log.warn("MD5涓嶄竴鑷�! 婧�: {}, 鐩爣: {}", sourceMd5, targetMd5);
- copySuccess = false;
- } else {
- log.info("MD5楠岃瘉鎴愬姛");
- }
- }
-
- } catch (IOException | SecurityException e) {
- log.error("绗瑊}娆″鍒跺け璐�", attempt, e);
- }
-
- // 9. 閲嶈瘯闂撮殧澶勭悊
- if (!copySuccess && attempt < maxRetries) {
- try {
- int delay = 200 * attempt; // 閫掑寤惰繜锛�200ms, 400ms
- log.info("绛夊緟 {}ms 鍚庨噸璇�", delay);
- Thread.sleep(delay);
- } catch (InterruptedException ie) {
- Thread.currentThread().interrupt();
- log.warn("閲嶈瘯绛夊緟琚腑鏂�", ie);
- break; // 濡傛灉绾跨▼琚腑鏂紝鍒欓��鍑洪噸璇曞惊鐜�
- }
- }
- }
-
- if (copySuccess) {
- log.info("鏂囦欢澶嶅埗瀹屾垚: {}", targetFilePath);
- } else {
- log.error("鏂囦欢澶嶅埗澶辫触锛屽凡灏濊瘯{}娆°�傛簮鏂囦欢: {}, 鐩爣鏂囦欢: {}", maxRetries, sourceFilePath, targetFilePath);
- }
-
- return copySuccess;
}
public static FileUploadResult uploadFile(String fileName, InputStream fis) {
@@ -536,133 +443,41 @@
}
/**
- * 澶嶅埗鏂囦欢锛堝甫閲嶈瘯鍜屾牎楠�-闃叉涓鏂瑰痉澶嶅埗鏂囦欢鍑洪敊闂锛�
+ * 澶嶅埗鏂囦欢
* @param oldPath
* @param newPath
* @param fileName
*/
public static boolean copyFile(String oldPath, String newPath, String fileName){
- // 1. 璺緞瑙勮寖鍖�
- String absolutePathSend = fileUploadFolder + oldPath;
- String absolutePathTarget = fileUploadFolder + newPath;
-
- // 2. 鍒涘缓鐩爣鏂囦欢澶�
- File targetFolder = new File(absolutePathTarget);
- if (!targetFolder.exists() && !targetFolder.mkdirs()) {
- log.error("鏃犳硶鍒涘缓鐩爣鏂囦欢澶�: {}", absolutePathTarget);
- return false;
- }
-
- // 3. 婧愭枃浠跺拰鐩爣鏂囦欢璺緞
- String sourceFilePath = absolutePathSend + File.separator + fileName;
- String targetFilePath = absolutePathTarget + File.separator + fileName;
-
- // 4. 鑾峰彇婧愭枃浠堕鏈熷ぇ灏�
- long expectedSize = -1;
- File sourceFile = new File(sourceFilePath);
- if (!sourceFile.exists()) {
- log.error("婧愭枃浠朵笉瀛樺湪: {}", sourceFilePath);
- return false;
- }
-
- try {
- expectedSize = sourceFile.length();
- log.info("鏂囦欢澶嶅埗: 婧�={}, 鐩爣={}, 澶у皬={}瀛楄妭", sourceFilePath, targetFilePath, expectedSize);
- } catch (SecurityException e) {
- log.error("鏃犳硶璁块棶婧愭枃浠�: {}", sourceFilePath, e);
- return false;
- }
-
- // 5. 澶嶅埗鎿嶄綔锛堟渶澶氶噸璇�3娆★級
- int maxRetries = 3;
- int attempt = 0;
- boolean copySuccess = false;
-
- while (attempt < maxRetries && !copySuccess) {
- attempt++;
- try {
- log.info("---- 寮�濮嬬{}娆″鍒跺皾璇� ----", attempt);
-
- // 6. 鎵ц澶嶅埗鎿嶄綔
- try (FileChannel in = new FileInputStream(sourceFilePath).getChannel();
- FileChannel out = new FileOutputStream(targetFilePath).getChannel()) {
- out.transferFrom(in, 0, in.size());
- }
-
- // 7. 鏂囦欢澶у皬楠岃瘉
- File copiedFile = new File(targetFilePath);
- long actualSize = copiedFile.length();
-
- if (expectedSize != actualSize) {
- log.warn("澶у皬涓嶄竴鑷�! 棰勬湡: {}B, 瀹為檯: {}B (宸��: {}B)",
- expectedSize, actualSize, Math.abs(actualSize - expectedSize));
- } else {
- log.info("鏂囦欢澶у皬楠岃瘉鎴愬姛: {}B", actualSize);
- copySuccess = true;
- }
-
- // 8. MD5鏍¢獙
- if (copySuccess) {
- String sourceMd5 = calculateMD5(sourceFilePath);
- String targetMd5 = calculateMD5(targetFilePath);
-
- if (!sourceMd5.equals(targetMd5)) {
- log.warn("MD5涓嶄竴鑷�! 婧�: {}, 鐩爣: {}", sourceMd5, targetMd5);
- copySuccess = false;
- } else {
- log.info("MD5楠岃瘉鎴愬姛");
- }
- }
-
- } catch (IOException | SecurityException e) {
- log.error("绗瑊}娆″鍒跺け璐�", attempt, e);
+ oldPath = fileUploadFolder + oldPath;
+ newPath = fileUploadFolder + newPath;
+ File oldFile = new File(oldPath, fileName);
+ File newFile = new File(newPath, fileName);
+ if(oldFile.exists()){
+ if(!newFile.getParentFile().exists()){
+ newFile.getParentFile().mkdirs();
}
-
- // 9. 閲嶈瘯闂撮殧澶勭悊
- if (!copySuccess && attempt < maxRetries) {
+ FileChannel inputChannel = null;
+ FileChannel outputChannel = null;
+ try{
+ inputChannel = new FileInputStream(oldFile).getChannel();
+ outputChannel = new FileOutputStream(newFile).getChannel();
+ outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
+ return true;
+ }catch (Exception e){
+ log.error("澶嶅埗鏂囦欢閿欒{}", e);
+ return false;
+ }finally {
try {
- int delay = 200 * attempt; // 閫掑寤惰繜锛�200ms, 400ms
- log.info("绛夊緟 {}ms 鍚庨噸璇�", delay);
- Thread.sleep(delay);
- } catch (InterruptedException ie) {
- Thread.currentThread().interrupt();
+ inputChannel.close();
+ outputChannel.close();
+ }catch (Exception e){
+ log.error("澶嶅埗鏂囦欢閿欒{}", e);
}
+
}
}
-
- if (copySuccess) {
- log.info("鏂囦欢澶嶅埗瀹屾垚: {}", targetFilePath);
- } else {
- log.error("鏂囦欢澶嶅埗澶辫触锛屽凡灏濊瘯{}娆�", maxRetries);
- }
-
- return copySuccess;
- }
-
- /**
- * 璁$畻鏂囦欢鐨凪D5鍊�
- * @param filePath
- * @return
- */
- public static String calculateMD5(String filePath) {
- try (InputStream is = Files.newInputStream(Paths.get(filePath))) {
- MessageDigest md = MessageDigest.getInstance("MD5");
- byte[] buffer = new byte[8192];
- int read;
-
- while ((read = is.read(buffer)) != -1) {
- md.update(buffer, 0, read);
- }
-
- byte[] digest = md.digest();
- StringBuilder sb = new StringBuilder();
- for (byte b : digest) {
- sb.append(String.format("%02x", b));
- }
- return sb.toString();
- } catch (Exception e) {
- throw new RuntimeException("璁$畻MD5澶辫触: " + filePath, e);
- }
+ return false;
}
public static String getFileAbsPath(String path, String fileName){
--
Gitblit v1.9.3