| 
														
															@@ -1,29 +1,57 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import os 
														 | 
														
														 | 
														
															 import os 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import time 
														 | 
														
														 | 
														
															 import time 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+from threading import Timer 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from watchdog.observers import Observer 
														 | 
														
														 | 
														
															 from watchdog.observers import Observer 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from watchdog.events import FileSystemEventHandler 
														 | 
														
														 | 
														
															 from watchdog.events import FileSystemEventHandler 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 from tools.logger_handle import logger 
														 | 
														
														 | 
														
															 from tools.logger_handle import logger 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-from tools.oss_client import MinioClient, oss_handle 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 class FileSaveHandler(FileSystemEventHandler): 
														 | 
														
														 | 
														
															 class FileSaveHandler(FileSystemEventHandler): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def __init__(self, serve_client): 
														 | 
														
														 | 
														
															     def __init__(self, serve_client): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         self.serve_client = serve_client 
														 | 
														
														 | 
														
															         self.serve_client = serve_client 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.debounce_timers = {} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.upload_cache = {}  # 文件路径 → 上次上传时间戳 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.debounce_delay = 5  # 延迟秒数 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         super().__init__() 
														 | 
														
														 | 
														
															         super().__init__() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     def on_modified(self, event): 
														 | 
														
														 | 
														
															     def on_modified(self, event): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if event.is_directory: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        filepath = event.src_path 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         ext = os.path.splitext(event.src_path)[-1] 
														 | 
														
														 | 
														
															         ext = os.path.splitext(event.src_path)[-1] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if '~$' in event.src_path: 
														 | 
														
														 | 
														
															         if '~$' in event.src_path: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return 
														 | 
														
														 | 
														
															             return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        if ext in ['.docx', '.doc', '.ppt', '.pptx', '.xls', '.xlsx']: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            logger.info(f"[文件修改] 文件已保存: {event.src_path}, 执行上传操作。") 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            res = self.serve_client.upload_file(event.src_path) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if ext not in ['.docx', '.doc', '.ppt', '.pptx', '.xls', '.xlsx']: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        def do_upload(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if not os.path.exists(filepath): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            mtime = os.path.getmtime(filepath) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if self.upload_cache.get(filepath) == mtime: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                logger.debug(f"[重复上传跳过] {filepath}") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                return 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            logger.info(f"[文件修改] 文件已保存: {filepath}, 执行上传操作。") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            res = self.serve_client.upload_file(filepath) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if res: 
														 | 
														
														 | 
														
															             if res: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                logger.info(f'文件{event.src_path}上传成功') 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                logger.info(f'文件{filepath}上传成功') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             else: 
														 | 
														
														 | 
														
															             else: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                logger.info(f'文件{event.src_path}上传失败') 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                logger.info(f'文件{filepath}上传失败') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self.upload_cache[filepath] = mtime 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self.debounce_timers.pop(filepath, None) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if filepath in self.debounce_timers: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            self.debounce_timers[filepath].cancel() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        # 创建新的延迟上传任务 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        timer = Timer(self.debounce_delay, do_upload) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        self.debounce_timers[filepath] = timer 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        timer.start() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 def start_watchdog(serve_client, work_path): 
														 | 
														
														 | 
														
															 def start_watchdog(serve_client, work_path): 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -31,7 +59,7 @@ def start_watchdog(serve_client, work_path): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     observer = Observer() 
														 | 
														
														 | 
														
															     observer = Observer() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     observer.schedule(event_handler, work_path, recursive=True) 
														 | 
														
														 | 
														
															     observer.schedule(event_handler, work_path, recursive=True) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     observer.start() 
														 | 
														
														 | 
														
															     observer.start() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    logger.info('watch dog start') 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    logger.info(f'watch dog start {serve_client}') 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     try: 
														 | 
														
														 | 
														
															     try: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         while True: 
														 | 
														
														 | 
														
															         while True: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             time.sleep(1) 
														 | 
														
														 | 
														
															             time.sleep(1) 
														 |