From 002aac2eb465e9b41a6209b71c241b214ac30258 Mon Sep 17 00:00:00 2001
From: qfrjava <13402782+qfrjava@user.noreply.gitee.com>
Date: 星期日, 27 四月 2025 18:40:03 +0800
Subject: [PATCH] feat(lightrag): 增加通用转发接口和文档上传功能

---
 JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java |  390 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 313 insertions(+), 77 deletions(-)

diff --git a/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java b/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java
index e738abd..1726b11 100644
--- a/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java
+++ b/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTAIServerControl.java
@@ -1,28 +1,33 @@
 package com.smtaiserver.smtaiserver.control;
 
-import java.util.*;
-import java.util.Map.Entry;
-
-import com.smtaiserver.smtaiserver.weixinLogin.WeChatUtils;
-import org.apache.commons.text.similarity.JaccardSimilarity;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.web.servlet.ModelAndView;
-
+import cn.hutool.http.HttpUtil;
 import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
 import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
 import com.smtaiserver.smtaiserver.database.SMTDatabase;
 import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
 import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecords;
+import com.smtaiserver.smtaiserver.weixinLogin.WeChatUtils;
 import com.smtservlet.core.SMTRequest;
 import com.smtservlet.util.Json;
 import com.smtservlet.util.SMTHttpClient;
 import com.smtservlet.util.SMTJsonWriter;
 import com.smtservlet.util.SMTStatic;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.util.*;
+import java.util.Map.Entry;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.text.similarity.JaccardSimilarity;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.ModelAndView;
 
 public class SMTAIServerControl 
 {
-
+	private static Object					_lockSSO = new Object();
 	private static Logger 					_logger = LogManager.getLogger(SMTAIServerControl.class);
 	
     public ModelAndView swaggerConfigurationUI(SMTRequest tranReq) throws Exception {
@@ -136,8 +141,8 @@
     {
     	String phone = tranReq.convParamToString("phone", true);
     	
-    	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+    	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
     		DBRecords recs = db.querySQL("SELECT user_id FROM sys_user_info WHERE user_phone=?", new Object[] {
     			phone	
@@ -175,10 +180,7 @@
     		
       	   	return tranReq.returnJsonState(true, null, null);
        	}
-    	finally
-    	{
-    		db.close();
-    	}   	
+	
     }
     
     private ModelAndView loginUser(SMTDatabase db, DBRecord recUser, boolean updateLoginFlag, SMTAIServerRequest tranReq) throws Exception
@@ -211,11 +213,12 @@
     	jsonWr.addKeyValue("sex", recUser.getString("user_sex"));
     	jsonWr.addKeyValue("email", recUser.getString("user_email"));
     	jsonWr.addKeyValue("note", recUser.getString("note"));
+		if (recUser.getString("weixin_nickname")!=null)
+    	jsonWr.addKeyValue("weixin_nickname",recUser.getString("weixin_nickname") );
 		boolean b1 = recUser.getString("weixin_openid") != null;
 		jsonWr.addKeyValue("weixin_openid",b1);
     	jsonWr.addKeyValue("web_login", "Y".equals(recUser.getString("web_login")));
-    	
-	   	return tranReq.returnJson(jsonWr);   	
+	   	return tranReq.returnJson(jsonWr);
     }
     
     public ModelAndView loginSMS(SMTAIServerRequest tranReq) throws Exception 
@@ -226,8 +229,8 @@
     	if(SMTStatic.isNullOrEmpty(client))
     		client = "鎵嬫満";
     	
-    	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+    	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
     		DBRecords recs = db.querySQL("SELECT * FROM sys_user_info WHERE user_phone=? AND sms_code IS NOT NULL AND user_state_code='Y'", new Object[] {
     			phone	
@@ -268,9 +271,65 @@
         	return tranReq.returnJsonState(false, "鐧诲綍澶辫触", null);
     		
     	}
-    	finally
+
+
+    }
+    
+    public ModelAndView loginSSO(SMTAIServerRequest tranReq) throws Exception 
+    {
+     	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
-    		db.close();
+    		String token = tranReq.convParamToString("user_token", true);
+
+    		String ssoUrl = (String) SMTAIServerApp.getApp().getGlobalConfig("sso_url");
+    		ssoUrl = ssoUrl.replace("{user_token}", java.net.URLEncoder.encode(token, "UTF-8"));
+    		SMTHttpClient web = new SMTHttpClient();
+    		Json jsonResp = Json.read(web.getHttpString(ssoUrl, null, null));
+    		
+    		if(!jsonResp.safeGetBoolean("json_ok", false))
+    			throw new Exception("login error");
+    		
+    		//{"json_ok":true,"value":{"USER_ID":"b6178aa09e4946d6a2d6bbbd7d22f666","USER_NAME":"鍞愭垚","USER_LOGIN_NAME":"tc","USER_PART":"ba24b67a00574d8b9391434a207ea972","USER_SEX":null,"USER_PHONE":null,"USER_EMAIL":null}}
+    		
+    		Json jsonUserInfo = jsonResp.getJson("value");
+    		String userId = jsonUserInfo.getJson("USER_ID").asString();
+    		String userName = jsonUserInfo.getJson("USER_NAME").asString();
+    		
+    		// 鏌ヨ鐢ㄦ埛鏄惁瀛樺湪, 涓嶅瓨鍦ㄥ垯鍒涘缓鐢ㄦ埛
+    		synchronized(_lockSSO)
+    		{
+    			DBRecords recs = db.querySQL("SELECT * FROM sys_user_info WHERE user_id=?", new Object[] {userId});
+    			if(recs.getRowCount() == 0)
+    			{
+    				db.beginTran();
+    				try
+    				{
+	    				db.executeSQL("INSERT INTO sys_user_info(user_id, user_name, user_state_code, create_time)VALUES(?, ?, ?, ?)", new Object[] {
+	    					userId,
+	    					userName,
+	    					"Y",
+	    					new Date()
+	    				});
+	    				
+	    				db.executeSQL("INSERT INTO sys_role_user(user_id, role_id)VALUES(?, ?)", new Object[] {
+	    					userId,
+	    					(String) SMTAIServerApp.getApp().getGlobalConfig("sso_role_id")
+	    				});
+	    				db.commitTran();
+    				}
+    				catch(Exception ex)
+    				{
+    					db.rollbackDB(ex);
+    				}
+    				
+    				recs = db.querySQL("SELECT * FROM sys_user_info WHERE user_id=?", new Object[] {userId});
+    			}
+    			
+         		return loginUser(db, recs.getRecord(0), false, tranReq);
+
+    		}
+    		
     	}
 
     }
@@ -295,14 +354,16 @@
     	
     	password = SMTStatic.convStrToMD5(password);
     	
-     	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+     	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
 			boolean is_weixin=false;
 			// 寰俊鎵爜鐧诲綍
 			if (weixinCode != null) {
 				Map<String, String> accessTokenMap = WeChatUtils.getAccessToken(weixinCode);
 				String openid = accessTokenMap.get("openid");
+				String accessToken = accessTokenMap.get("access_token");
+				String nikename = getUserInfo(accessToken, openid);
 
 				if (openid == null || openid.isEmpty()) {
 					return tranReq.returnJsonState(false, "鐧诲綍澶辫触, 鏃犳晥鐨勫井淇′簩缁寸爜", null);
@@ -313,10 +374,13 @@
 				if (userByOpenid.getRowCount() == 0) {
 					return tranReq.returnJsonState(false, "鐧诲綍澶辫触, 璇风粦瀹氳处鍙�", null);
 				}
-
 				// 鑾峰彇鐢ㄦ埛鍚嶅拰瀵嗙爜
 				username = userByOpenid.getRecord(0).getString("user_name");
 				password = userByOpenid.getRecord(0).getString("user_pass");
+				db.executeSQL("UPDATE sys_user_info SET weixin_nickname=? WHERE user_name=?", new Object[] {
+						nikename,
+						username
+				});
 				is_weixin=true;
 			}
 
@@ -328,9 +392,9 @@
     			return tranReq.returnJsonState(false, "鐧诲綍澶辫触", null);
     		
     		String userPass = recs.getRecord(0).getString("user_pass");
-    		if(!SMTStatic.isNullOrEmpty(userPass))
+    		//if(!SMTStatic.isNullOrEmpty(userPass))
     		{
-    			if(!userPass.equals(password))
+    			if(!password.equals(userPass))
     				return tranReq.returnJsonState(false, "鐧诲綍澶辫触", null);
     		}
     		
@@ -344,17 +408,29 @@
     			client
     		});
     		tranReq.setSessionAttribute("login_from", client);
-    		
+
     		return loginUser(db, recs.getRecord(0), updateLoginFlag, tranReq);
     	}
-    	finally
-    	{
-    		db.close();
-    	}
+
     	
     }
-   
-    public ModelAndView  getLLMList(SMTAIServerRequest tranReq) throws Exception 
+
+  public static String getUserInfo(String accessToken, String openId) {
+    // 鎷兼帴璇锋眰鍦板潃
+    String requestUrl =
+        "https://api.weixin.qq.com/sns/userinfo?access_token="
+            + accessToken
+            + "&openid="
+            + openId
+            + "&lang=zh_CN";
+    String result = HttpUtil.get(requestUrl);
+    Json.Reader reader = new Json.Reader();
+    Json read = (Json) reader.read(result, null);
+    //    JSONObject jsonObject = new JSONObject(result);
+    return read.safeGetStr("nickname", null);
+  }
+
+    public ModelAndView  getLLMList(SMTAIServerRequest tranReq) throws Exception
     {
     	SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
     	jsonWr.beginArray("llm_list");
@@ -387,8 +463,8 @@
     
     public ModelAndView getSceneGroupTree(SMTAIServerRequest tranReq) throws Exception 
     {
-    	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+    	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
     		String userId = tranReq.getLoginUserId();
     		DBRecords recs;
@@ -441,16 +517,13 @@
     		
     		return tranReq.returnJson(jsonWr);
     	}
-    	finally
-    	{
-    		db.close();
-    	}   	
+	
     }
     
     public ModelAndView getSceneSample(SMTAIServerRequest tranReq) throws Exception 
     {
-    	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+    	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
     		String userId = tranReq.getLoginUserId();
     		DBRecords recs;
@@ -502,17 +575,84 @@
     		
     		return tranReq.returnJson(jsonWr);
     	}
-    	finally
-    	{
-    		db.close();
-    	}   	
-    }
 
-    public ModelAndView createHistoryGroup(SMTAIServerRequest tranReq) throws Exception 
+    }
+	public ModelAndView addSceneSample(SMTAIServerRequest tranReq) throws Exception {
+		String groupId = tranReq.convParamToString("group_id", true);
+		String sampleId = tranReq.convParamToString("sample_id", true);
+		String sampleQuestion = tranReq.convParamToString("sample_question", true);
+		String sampleTitle = tranReq.convParamToString("sample_title", true);
+		String sampleEnable = tranReq.convParamToString("sample_enable", true);
+		String autoTestSupervisor = tranReq.convParamToString("auto_test_supervisor", false);
+		String autoTestJson = tranReq.convParamToString("auto_test_json", false);
+		String autoTestMacro = tranReq.convParamToString("auto_test_macro", false);
+		String autoTestNote = tranReq.convParamToString("auto_test_note", false);
+		String autoTestEnable = tranReq.convParamToString("auto_test_enable", false);
+		String sampleMatch = tranReq.convParamToString("sample_match", false);
+
+		
+
+		try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
+		{
+			// 妫�鏌ユ牱鏈琁D鏄惁宸插瓨鍦�
+			String selectSql = "SELECT * FROM ai_doc.ai_scene_sample WHERE sample_id = ?";
+			Object[] selectParams = {sampleId};
+			if (db.querySQL(selectSql, selectParams).getRowCount() > 0) {
+				return tranReq.returnJsonState(false, "鏍锋湰ID宸插瓨鍦�", null);
+			}
+
+			// 鎻掑叆鏂版牱鏈�
+			String insertSql = "INSERT INTO ai_doc.ai_scene_sample (group_id, sample_id, sample_question, sample_title, sample_enable, auto_test_supervisor, auto_test_json, auto_test_macro, auto_test_note, auto_test_enable, sample_match) " +
+					"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+			Object[] insertParams = {groupId, sampleId, sampleQuestion, sampleTitle, sampleEnable, autoTestSupervisor, autoTestJson, autoTestMacro, autoTestNote, autoTestEnable, sampleMatch};
+
+			db.executeSQL(insertSql, insertParams);
+
+			// 杩斿洖 JSON 缁撴灉
+			SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
+			return tranReq.returnJson(jsonWr);
+		}
+	}
+
+	public ModelAndView updateSceneSample(SMTAIServerRequest tranReq) throws Exception {
+		String sampleId = tranReq.convParamToString("sample_id", true);
+		String sampleQuestion = tranReq.convParamToString("sample_question", false);
+		String sampleTitle = tranReq.convParamToString("sample_title", false);
+		String sampleEnable = tranReq.convParamToString("sample_enable", false);
+		String autoTestSupervisor = tranReq.convParamToString("auto_test_supervisor", false);
+		String autoTestJson = tranReq.convParamToString("auto_test_json", false);
+		String autoTestMacro = tranReq.convParamToString("auto_test_macro", false);
+		String autoTestNote = tranReq.convParamToString("auto_test_note", false);
+		String autoTestEnable = tranReq.convParamToString("auto_test_enable", false);
+		String sampleMatch = tranReq.convParamToString("sample_match", false);
+
+		try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
+		{
+			// 妫�鏌ユ牱鏈琁D鏄惁瀛樺湪
+			String selectSql = "SELECT * FROM ai_doc.ai_scene_sample WHERE sample_id = ?";
+			Object[] selectParams = {sampleId};
+			if (db.querySQL(selectSql, selectParams).getRowCount() == 0) {
+				return tranReq.returnJsonState(false, "鏍锋湰ID涓嶅瓨鍦�", null);
+			}
+
+			// 鏇存柊鏍锋湰淇℃伅
+			String updateSql = "UPDATE ai_doc.ai_scene_sample SET sample_question = ?, sample_title = ?, sample_enable = ?, auto_test_supervisor = ?, auto_test_json = ?, auto_test_macro = ?, auto_test_note = ?, auto_test_enable = ?, sample_match = ? WHERE sample_id = ?";
+			Object[] updateParams = {sampleQuestion, sampleTitle, sampleEnable, autoTestSupervisor, autoTestJson, autoTestMacro, autoTestNote, autoTestEnable, sampleMatch, sampleId};
+
+			db.executeSQL(updateSql, updateParams);
+
+			// 杩斿洖 JSON 缁撴灉
+			SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
+			return tranReq.returnJson(jsonWr);
+		}
+	}
+
+
+	public ModelAndView createHistoryGroup(SMTAIServerRequest tranReq) throws Exception
     {
     	String groupTitle = tranReq.convParamToString("group_title", true);
-    	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+    	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
     		String groupId = SMTStatic.newUUID();
     		db.executeSQL("INSERT INTO chat_history_group(group_id, group_title, user_id, create_time)VALUES(?, ?, ?, ?)", new Object[] {
@@ -524,10 +664,6 @@
     		SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
     		jsonWr.addKeyValue("history_group_id", groupId);
     		return tranReq.returnJson(jsonWr);
-    	}
-    	finally
-    	{
-    		db.close();
     	}
     }
     
@@ -555,8 +691,8 @@
     		idListSQL = " AND history_id in (" + idListSQL + ")";
     	}
     	
-    	SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
-    	try
+    	
+    	try(SMTDatabase db = SMTAIServerApp.getApp().allocDatabase())
     	{
     		recs = db.querySQL("SELECT group_id FROM chat_history_group WHERE user_id=? AND group_id=? ORDER BY create_time", new Object[] {
     			tranReq.getLoginUserId(),
@@ -602,10 +738,7 @@
     		
     		return tranReq.returnJson(jsonWr);
     	}
-    	finally
-    	{
-    		db.close();
-    	}
+
     }    
     
     public ModelAndView getHistoryGroups(SMTAIServerRequest tranReq) throws Exception 
@@ -988,27 +1121,130 @@
 
     }
 
-	public ModelAndView userBindingWeChatAccount(SMTAIServerRequest tranReq) throws Exception {
-		String weixinCode = tranReq.convParamToString("weixin_code", true);
-		String userName=null;
+	/**
+	 * 缁戝畾寰俊openid鍜宯ickname
+	 * @param tranReq
+	 * @return
+	 * @throws Exception
+	 */
+  public ModelAndView userBindingWeChatAccount(SMTAIServerRequest tranReq) throws Exception {
+    String weixinCode = tranReq.convParamToString("weixin_code", true);
+    String userName;
+	  String nikcname;
+	  SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
+    try {
+      String loginUserId = tranReq.getLoginUserId();
+      DBRecords dbRecords =
+          db.querySQL("select * from sys_user_info where user_id =?", new Object[] {loginUserId});
+      if (dbRecords.getRowCount() > 0) {
+        userName = (String) dbRecords.getRecords().get(0).getValue("user_name");
+      } else {
+        return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鐢ㄦ埛淇℃伅寮傚父", null);
+      }
+      Map<String, String> accessTokenMap = WeChatUtils.getAccessToken(weixinCode);
+      String openid = accessTokenMap.get("openid");
+      String accessToken = accessTokenMap.get("access_token");
+       nikcname = getUserInfo(accessToken, openid);
+      if (openid == null || openid.isEmpty()) {
+        return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鏃犳晥鐨勫井淇′簩缁寸爜", null);
+      }
+          db.executeSQL(
+              "UPDATE sys_user_info set weixin_openid =?,weixin_nickname=?  where user_name=?",
+              new Object[] {openid, nikcname, userName});
+    }
+	finally
+	{
+		db.close();
+	}
+    return tranReq.returnJsonState(true, "缁戝畾鎴愬姛", nikcname);
+  }
+
+  public ModelAndView uploadFile(SMTAIServerRequest tranReq, @RequestParam(value="files", required=false) MultipartFile[] files) throws Exception {
+    String orderId = tranReq.convParamToString("orderId", true);
+    SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
+    try {
+      for (MultipartFile file : files) {
+        Date nowDate = new Date();
+        String fileName = new File(Objects.requireNonNull(file.getOriginalFilename())).getName();
+        byte[] fileData = readAttachFile(file);
+        db.executeSQL(
+            " INSERT INTO work_order_attach(id, order_id, title, file_byte,create_time,update_time)"
+                + " VALUES(?,?,?,?,?,?)",
+            new Object[] {SMTStatic.newUUID(), orderId, fileName, fileData, nowDate, nowDate});
+      }
+    } catch (Exception ex) {
+      _logger.error("upload file fail :" + ex);
+    } finally {
+      db.close();
+    }
+    return tranReq.returnJsonState(true, "涓婁紶鎴愬姛", null);
+  }
+
+	public ModelAndView listImagesByOrderId(SMTAIServerRequest tranReq) throws Exception {
+		String orderId = tranReq.convParamToString("orderId", true);
 		try (SMTDatabase db = SMTAIServerApp.getApp().allocDatabase()) {
-		String loginUserId = tranReq.getLoginUserId();
-			DBRecords dbRecords = db.querySQL("select * from sys_user_info where user_id =?", new Object[]{loginUserId});
-			if (dbRecords.getRowCount()>0) {
-				 userName = (String)dbRecords.getRecords().get(0).getValue("user_name");
-			}else {
-				return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鐢ㄦ埛淇℃伅寮傚父", null);
+			DBRecords dbRecords = db.querySQL(
+					"SELECT * FROM work_order_attach WHERE order_id = ?",
+					new Object[]{orderId}
+			);
+
+			List<Map<String, Object>> fileList = new ArrayList<>();
+			for (DBRecord record : dbRecords.getRecords()) {
+				Map<String, Object> fileMap = new HashMap<>();
+				fileMap.put("title", record.getString("title"));
+				fileMap.put("byte", record.getValue("file_byte"));
+				fileList.add(fileMap);
 			}
-		Map<String, String> accessTokenMap = WeChatUtils.getAccessToken(weixinCode);
-		String openid = accessTokenMap.get("openid");
 
-		if (openid == null || openid.isEmpty()) {
-			return tranReq.returnJsonState(false, "缁戝畾澶辫触, 鏃犳晥鐨勫井淇′簩缁寸爜", null);
+			return tranReq.returnJsonState(true, "鏌ヨ鎴愬姛", fileList);
 		}
-
-			int executeSQL = db.executeSQL("UPDATE sys_user_info set weixin_openid =? where user_name=?", new Object[]{openid, userName});
-		}
-		return tranReq.returnJsonState(true, "缁戝畾鎴愬姛", null);
 	}
 
+	public void getImageById(SMTAIServerRequest tranReq, HttpServletResponse response) throws Exception {
+		String id = tranReq.convParamToString("id", true);
+		try (SMTDatabase db = SMTAIServerApp.getApp().allocDatabase()) {
+			DBRecords dbRecords = db.querySQL(
+					"SELECT file_byte, title FROM work_order_attach WHERE id = ?", new Object[]{id});
+			if (dbRecords.getRecords().isEmpty()) {
+				response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+				return;
+			}
+			DBRecord record = dbRecords.getRecords().get(0);
+			byte[] fileByte = (byte[]) record.getValue("file_byte");
+			String fileName = record.getString("title");
+			String contentType = getContentTypeFromFileName(fileName);
+
+			response.setContentType(contentType);
+			response.setContentLength(fileByte.length);
+			response.getOutputStream().write(fileByte);
+			response.getOutputStream().flush();
+		} catch (Exception e) {
+			_logger.error("鍥剧墖璇诲彇澶辫触", e);
+			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+		}
+	}
+
+
+
+	private byte[] readAttachFile(MultipartFile file) throws Exception {
+    InputStream is = file.getInputStream();
+    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+    byte[] data = new byte[1024 * 1024];
+    while (true) {
+      int size = is.read(data);
+      if (size <= 0) return bos.toByteArray();
+
+      bos.write(data, 0, size);
+    }
+  }
+
+  private String getContentTypeFromFileName(String fileName) {
+    if (fileName == null) return "application/octet-stream";
+    fileName = fileName.toLowerCase();
+    if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) return "image/jpeg";
+    if (fileName.endsWith(".png")) return "image/png";
+    if (fileName.endsWith(".gif")) return "image/gif";
+    if (fileName.endsWith(".bmp")) return "image/bmp";
+    return "application/octet-stream"; // 榛樿绫诲瀷
+  }
 }

--
Gitblit v1.9.3