add feat

This commit is contained in:
eust-w 2025-09-22 19:12:45 +08:00
parent 39e3fe76ea
commit cadbab7541
2 changed files with 17 additions and 12 deletions

View File

@ -16,8 +16,10 @@ from pathlib import Path
from PIL import Image from PIL import Image
import numpy as np import numpy as np
from baidu_bos_manager import get_bos_manager # Optional external managers (BOS/Mongo) are disabled in minimal setup
from mongodb_manager import get_mongodb_manager # Previously:
# from baidu_bos_manager import get_bos_manager
# from mongodb_manager import get_mongodb_manager
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -31,8 +33,9 @@ class OptimizedFileHandler:
SUPPORTED_IMAGE_FORMATS = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'} SUPPORTED_IMAGE_FORMATS = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'}
def __init__(self, local_storage_dir=None): def __init__(self, local_storage_dir=None):
self.bos_manager = get_bos_manager() # In minimal setup, BOS and MongoDB are not used
self.mongodb_manager = get_mongodb_manager() self.bos_manager = None
self.mongodb_manager = None
self.temp_files = set() # 跟踪临时文件 self.temp_files = set() # 跟踪临时文件
self.local_storage_dir = local_storage_dir or tempfile.gettempdir() self.local_storage_dir = local_storage_dir or tempfile.gettempdir()
@ -126,14 +129,14 @@ class OptimizedFileHandler:
} }
# 如果有BOS管理器也上传到BOS # 如果有BOS管理器也上传到BOS
if hasattr(self, 'bos_manager') and self.bos_manager: if self.bos_manager:
bos_key = f"images/memory_{file_id}_{filename}" bos_key = f"images/memory_{file_id}_{filename}"
bos_result = self._upload_to_bos_from_memory(file_content, bos_key, filename) bos_result = self._upload_to_bos_from_memory(file_content, bos_key, filename)
if bos_result: if bos_result:
metadata["bos_key"] = bos_key metadata["bos_key"] = bos_key
metadata["bos_url"] = bos_result["url"] metadata["bos_url"] = bos_result["url"]
if hasattr(self, 'mongodb_manager') and self.mongodb_manager: if self.mongodb_manager:
self.mongodb_manager.store_file_metadata(metadata=metadata) self.mongodb_manager.store_file_metadata(metadata=metadata)
logger.info(f"✅ 内存处理图像成功: {filename} ({len(file_content)} bytes)") logger.info(f"✅ 内存处理图像成功: {filename} ({len(file_content)} bytes)")
@ -192,7 +195,7 @@ class OptimizedFileHandler:
} }
# 如果有BOS管理器也上传到BOS # 如果有BOS管理器也上传到BOS
if hasattr(self, 'bos_manager') and self.bos_manager: if self.bos_manager:
bos_key = f"images/temp_{file_id}_{filename}" bos_key = f"images/temp_{file_id}_{filename}"
bos_result = self.bos_manager.upload_file(temp_path, bos_key) bos_result = self.bos_manager.upload_file(temp_path, bos_key)
if bos_result: if bos_result:
@ -200,7 +203,7 @@ class OptimizedFileHandler:
metadata["bos_url"] = bos_result["url"] metadata["bos_url"] = bos_result["url"]
# 存储元数据到MongoDB # 存储元数据到MongoDB
if hasattr(self, 'mongodb_manager') and self.mongodb_manager: if self.mongodb_manager:
self.mongodb_manager.store_file_metadata(metadata=metadata) self.mongodb_manager.store_file_metadata(metadata=metadata)
logger.info(f"✅ 临时文件处理图像成功: {filename} ({file_stat.st_size} bytes)") logger.info(f"✅ 临时文件处理图像成功: {filename} ({file_stat.st_size} bytes)")
@ -282,6 +285,9 @@ class OptimizedFileHandler:
with self.temp_file_context(suffix=ext, delete_on_exit=False) as temp_path: with self.temp_file_context(suffix=ext, delete_on_exit=False) as temp_path:
# 从BOS下载文件 # 从BOS下载文件
if not self.bos_manager:
logger.warning("BOS manager is not available; skip download.")
return None
success = self.bos_manager.download_file(bos_key, temp_path) success = self.bos_manager.download_file(bos_key, temp_path)
if success: if success:
@ -298,15 +304,14 @@ class OptimizedFileHandler:
def _upload_to_bos_from_memory(self, content: bytes, bos_key: str, filename: str) -> Optional[Dict[str, Any]]: def _upload_to_bos_from_memory(self, content: bytes, bos_key: str, filename: str) -> Optional[Dict[str, Any]]:
"""从内存直接上传到BOS""" """从内存直接上传到BOS"""
try: try:
if not self.bos_manager:
return None
# 创建临时文件用于上传 # 创建临时文件用于上传
with self.temp_file_context() as temp_path: with self.temp_file_context() as temp_path:
with open(temp_path, 'wb') as temp_file: with open(temp_path, 'wb') as temp_file:
temp_file.write(content) temp_file.write(content)
# 上传到BOS
result = self.bos_manager.upload_file(temp_path, bos_key) result = self.bos_manager.upload_file(temp_path, bos_key)
return result return result
except Exception as e: except Exception as e:
logger.error(f"❌ 内存上传到BOS失败: {filename}, {e}") logger.error(f"❌ 内存上传到BOS失败: {filename}, {e}")
return None return None

View File

@ -1,5 +1,4 @@
torch>=2.0.0 torch>=2.0.0
torchvision>=0.15.0
transformers>=4.30.0 transformers>=4.30.0
accelerate>=0.20.0 accelerate>=0.20.0
faiss-cpu>=1.7.4 faiss-cpu>=1.7.4
@ -9,3 +8,4 @@ tqdm>=4.65.0
flask>=2.3.0 flask>=2.3.0
werkzeug>=2.3.0 werkzeug>=2.3.0
requests>=2.31.0 requests>=2.31.0
safetensors>=0.4.0