From 3f175663a851caa93a705ec0de39359726ff720f Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期五, 23 八月 2024 17:29:48 +0800
Subject: [PATCH] 代码提交

---
 src/main/java/com/product/file/service/FileManagerService.java |   82 ++++++++++++++++++++++++++++++-----------
 1 files changed, 60 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/product/file/service/FileManagerService.java b/src/main/java/com/product/file/service/FileManagerService.java
index c66be37..9b9502f 100644
--- a/src/main/java/com/product/file/service/FileManagerService.java
+++ b/src/main/java/com/product/file/service/FileManagerService.java
@@ -29,6 +29,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
+import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -231,6 +232,39 @@
 		return baseDao.executeUpdate(sql.toString());
 	}
 
+	/**
+	 * 鏍规嵁闄勪欢uuid鍒ゆ柇鏂囦欢鏄惁瀛樺湪
+	 *
+	 * @param uuid
+	 * @return
+	 */
+	public boolean fileExist(String uuid) {
+		if (StringUtils.isEmpty(uuid)) {
+			return false;
+		}
+		FieldSetEntity attachmentFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, uuid, false);
+		if (attachmentFse == null) {
+			return false;
+		}
+
+		//鍒ゆ柇鏂囦欢瀛樻斁鍦ㄦ湇鍔″櫒杩樻槸鏈湴
+		boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
+		String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
+		String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
+		boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
+
+		if (needDownloadFromServerFlag) {
+			// 闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�
+			FTPService ftpService = new FTPService();
+			return ftpService.fileIsExist(dir, fileName);
+		} else {
+			// 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
+			String localBasePath = Global.getSystemConfig("local.dir", "");
+			String path = localBasePath + File.separator + dir + File.separator + fileName;
+			File file = new File(path);
+			return file.isFile();
+		}
+	}
 
 	/**
 	 * 涓婁紶鏂囦欢鍒版湰鍦版湇鍔″櫒
@@ -347,7 +381,7 @@
 				attachmentFse.setValue(CmnConst.ENCRPT_SIGN, Global.getPropertyToBoolean("file.encrypt", "true") ? 1 : 0);
 				attachmentFse.setValue(CmnConst.ATTACHMENT_SIZE, fileLength);
 				attachmentFse.setValue(CmnConst.UPLOAD_SIGN, needUpload2FileServerFlag ? 1 : 0);
-
+				attachmentFse.setValue(CmnConst.FUNCTION_UUID, fse.getString(CmnConst.FUNCTION_UUID));
 				attachmentFse.setValue(CmnConst.ATTACHMENT_CONTAINER, fse.getString(CmnConst.ATTACHMENT_CONTAINER));
 				attachmentFse.setValue(CmnConst.ATTACHMENT_DOMAIN, fse.getString(CmnConst.ATTACHMENT_DOMAIN));
 				attachmentFse.setValue(CmnConst.MODULE_UUID, fse.getString(CmnConst.MODULE_UUID));
@@ -400,31 +434,29 @@
 		boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
 		String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
 		String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
+		//鐪熷疄鏂囦欢鍚�
+		String realFileName = attachmentFse.getString(CmnConst.FILE_NAME);
 		String viewOnlineSign = attachmentFse.getString(CmnConst.VIEW_ONLINE_SIGN);
 		boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
 		boolean needOnlineViewFlag = "1".equals(fse.getString(CmnConst.NEED_ONLINE_VIEW)) && "1".equals(viewOnlineSign);
-		if (needOnlineViewFlag) {
-			// 闇�瑕佸湪绾块瑙堜笖杞崲涔嬪悗鎵嶈兘鍦ㄧ嚎棰勮
+		if (needOnlineViewFlag && !realFileName.endsWith(".xlsx") && !realFileName.endsWith(".xls")) {
+			// 闇�瑕佸湪绾块瑙堜笖杞崲涔嬪悗鎵嶈兘鍦ㄧ嚎棰勮 excel 鏂囦欢涓嶉渶瑕佽浆鎹㈢洿鎺ヨ緭鍑洪瑙�
 			dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
 		}
 
-		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-		String userAgent = request.getHeader("User-Agent");
-		String file_name = attachmentFse.getString("file_name");
-		if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
-			file_name = java.net.URLEncoder.encode(file_name, "UTF-8");
-		} else {
-			// 闈濱E娴忚鍣ㄧ殑澶勭悊锛�
-			file_name = new String(file_name.getBytes("UTF-8"), "ISO-8859-1");
-		}
 		String path = dir + File.separator + fileName;
 		if (needDownloadFromServerFlag) {
 			// 闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�
 			FTPService ftpService = new FTPService();
 			logger.info("闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�...");
-			response.setContentType("multipart/form-data");
-			response.setHeader("Content-disposition",
-					String.format("attachment; filename=\"%s\"", file_name));
+			response.setHeader("Access-Control-Expose-Headers", "*");
+			if (realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls")) {
+				response.setContentType("application/vnd.ms-excel");
+			} else {
+				response.setContentType("multipart/form-data");
+			}
+			response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
+			//璁剧疆澶翠腑鐨勬枃浠剁被鍨�
 			if (!needOnlineViewFlag && !encrptSignFlag) {
 				logger.info("涓嶉渶瑕佽В瀵嗕笖鑾峰彇鍘熸枃浠�...");
 				try (ServletOutputStream os = response.getOutputStream()) {
@@ -483,9 +515,14 @@
 			}
 			int len;
 			byte[] b = new byte[1024];
-			response.setContentType("multipart/form-data");
 			InputStream is = new FileInputStream(file);
-			response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", file_name));
+			response.setHeader("Access-Control-Expose-Headers", "*");
+			if (realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls")) {
+				response.setContentType("application/vnd.ms-excel");
+			} else {
+				response.setContentType("multipart/form-data");
+			}
+			response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
 			response.setContentLengthLong(file.length());
 			try (ServletOutputStream os = response.getOutputStream()) {
 				while ((len = is.read(b)) > 0) {
@@ -500,7 +537,7 @@
 				}
 				os.flush();
 			}
-
+			is.close();
 		}
 		logger.info("鏂囦欢娴佽幏鍙栨垚鍔�");
 	}
@@ -537,7 +574,7 @@
 			try {
 				temp.createNewFile();
 			} catch (IOException e) {
-				throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() : ""));
+				throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() + ",uuid:" + attachmentFse.getUUID() : ""));
 			}
 			try (FileOutputStream fos = new FileOutputStream(temp); BufferedOutputStream out = new BufferedOutputStream(fos)) {
 
@@ -545,10 +582,10 @@
 				return temp;
 			} catch (Exception e) {
 				e.printStackTrace();
-				throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() : ""));
+				throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + (e.getMessage() != null ? e.getMessage() + ",uuid:" + attachmentFse.getUUID() : ""));
 			}
 		}
-		throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText());
+		throw new BaseException(FileCode.GET_FILE_FAIL.getValue(), FileCode.GET_FILE_FAIL.getText() + ",uuid:" + attachmentFse.getUUID());
 	}
 
 	/**
@@ -556,7 +593,8 @@
 	 */
 	public byte[] getFileContent(FieldSetEntity attachmentFse) throws BaseException {
 		if (attachmentFse == null || !CmnConst.PRODUCT_SYS_ATTACHMENTS.equals(attachmentFse.getTableName())) {
-			return new byte[16];
+			//杩斿洖涓�涓┖鐨勫瓧鑺傛暟缁�
+			return new byte[0];
 		}
 		try (ByteArrayOutputStream os = new ByteArrayOutputStream();) {
 			FTPService ftpService = new FTPService();

--
Gitblit v1.9.2