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