diff --git a/app/services/oss_storage.py b/app/services/oss_storage.py index fabf87d..f6ac98c 100644 --- a/app/services/oss_storage.py +++ b/app/services/oss_storage.py @@ -1,51 +1,77 @@ import uuid from datetime import datetime, timezone from typing import Optional +from pathlib import Path -import oss2 - +# import oss2 # TODO: 阿里云 OSS 待配置完成后启用 from app.config import settings from app.utils.logger import logger class OSSStorage: - def __init__(self): + """ + 图片存储类 + TODO: 阿里云 OSS 配置完成后,注释掉 use_local_only=True 即可启用 OSS + """ + + def __init__(self, use_local_only: bool = True): + self.use_local_only = use_local_only self.bucket = None - self._init_bucket() + + if not self.use_local_only: + self._init_bucket() def _init_bucket(self): - if not settings.oss.access_key_id or not settings.oss.bucket_name: - logger.warning("OSS配置不完整,将使用本地存储") - return - - try: - auth = oss2.Auth(settings.oss.access_key_id, settings.oss.access_key_secret) - self.bucket = oss2.Bucket(auth, settings.oss.endpoint, settings.oss.bucket_name) - logger.info(f"OSS连接成功: {settings.oss.bucket_name}") - except Exception as e: - logger.error(f"OSS连接失败: {e}") - self.bucket = None + """ + 初始化 OSS Bucket(待配置完成后启用) + """ + # TODO: 阿里云 OSS 配置完成后启用以下代码 + # if not settings.oss.access_key_id or not settings.oss.bucket_name: + # logger.warning("OSS配置不完整,将使用本地存储") + # self.use_local_only = True + # return + # + # try: + # auth = oss2.Auth(settings.oss.access_key_id, settings.oss.access_key_secret) + # self.bucket = oss2.Bucket(auth, settings.oss.endpoint, settings.oss.bucket_name) + # logger.info(f"OSS连接成功: {settings.oss.bucket_name}") + # except Exception as e: + # logger.error(f"OSS连接失败: {e}") + # self.bucket = None + logger.info("OSS存储已注释,启用本地存储模式") def upload_image(self, image_data: bytes, filename: Optional[str] = None) -> str: - if not self.bucket: + """ + 上传图片(当前使用本地存储,OSS 配置完成后可启用) + """ + if self.use_local_only or not self.bucket: return self._upload_local(image_data, filename) - if filename is None: - timestamp = datetime.now().strftime("%Y%m%d%H%M%S") - unique_id = uuid.uuid4().hex[:8] - ext = ".jpg" - filename = f"alerts/{timestamp}_{unique_id}{ext}" + # TODO: 阿里云 OSS 配置完成后启用以下代码 + # if not self.bucket: + # return self._upload_local(image_data, filename) + # + # if filename is None: + # timestamp = datetime.now().strftime("%Y%m%d%H%M%S") + # unique_id = uuid.uuid4().hex[:8] + # ext = ".jpg" + # filename = f"alerts/{timestamp}_{unique_id}{ext}" + # + # try: + # self.bucket.put_object(filename, image_data) + # url = f"{settings.oss.url_prefix}/{filename}" + # logger.info(f"图片上传OSS成功: {url}") + # return url + # except Exception as e: + # logger.error(f"图片上传OSS失败: {e}") + # return self._upload_local(image_data, filename) - try: - self.bucket.put_object(filename, image_data) - url = f"{settings.oss.url_prefix}/{filename}" - logger.info(f"图片上传OSS成功: {url}") - return url - except Exception as e: - logger.error(f"图片上传OSS失败: {e}") - return self._upload_local(image_data, filename) + return self._upload_local(image_data, filename) def _upload_local(self, image_data: bytes, filename: Optional[str] = None) -> str: + """ + 本地存储(当前使用) + """ upload_dir = Path("uploads") upload_dir.mkdir(exist_ok=True) @@ -65,14 +91,19 @@ class OSSStorage: return local_url def get_url(self, path: str) -> str: + """ + 获取图片访问URL + """ if path.startswith("http"): return path - if self.bucket: - return f"{settings.oss.url_prefix}/{path}" + # TODO: 阿里云 OSS 配置完成后启用以下代码 + # if self.bucket: + # return f"{settings.oss.url_prefix}/{path}" return f"/uploads/{path}" if not path.startswith("/") else path -oss_storage = OSSStorage() +# 使用本地存储模式(OSS 配置完成后可修改为 OSSStorage(use_local_only=False)) +oss_storage = OSSStorage(use_local_only=True) def get_oss_storage() -> OSSStorage: diff --git a/app/utils/logger.py b/app/utils/logger.py index 3a9d6db..605372f 100644 --- a/app/utils/logger.py +++ b/app/utils/logger.py @@ -1,6 +1,9 @@ import logging import sys from datetime import datetime +from pathlib import Path + +from app.config import settings def setup_logger():