diff --git a/pkg/platform/botmgr.py b/pkg/platform/botmgr.py index ee9bd040..eb708d9b 100644 --- a/pkg/platform/botmgr.py +++ b/pkg/platform/botmgr.py @@ -157,6 +157,9 @@ class PlatformManager: self.adapter_dict = {} async def initialize(self): + # delete all bot log images + await self.ap.storage_mgr.storage_provider.delete_dir_recursive('bot_log_images') + self.adapter_components = self.ap.discover.get_components_by_kind('MessagePlatformAdapter') adapter_dict: dict[str, type[abstract_platform_adapter.AbstractMessagePlatformAdapter]] = {} for component in self.adapter_components: diff --git a/pkg/platform/logger.py b/pkg/platform/logger.py index 05fce394..68164865 100644 --- a/pkg/platform/logger.py +++ b/pkg/platform/logger.py @@ -149,7 +149,7 @@ class EventLogger(abstract_platform_event_logger.AbstractEventLogger): extension = mimetypes.guess_extension(mime_type) if extension is None: extension = '.jpg' - image_key = f'{message_session_id}-{uuid.uuid4()}{extension}' + image_key = f'bot_log_images/{message_session_id}-{uuid.uuid4()}{extension}' await self.ap.storage_mgr.storage_provider.save(image_key, img_bytes) image_keys.append(image_key) diff --git a/pkg/storage/provider.py b/pkg/storage/provider.py index 0111c617..09d8d93e 100644 --- a/pkg/storage/provider.py +++ b/pkg/storage/provider.py @@ -42,3 +42,10 @@ class StorageProvider(abc.ABC): key: str, ): pass + + @abc.abstractmethod + async def delete_dir_recursive( + self, + dir_path: str, + ): + pass diff --git a/pkg/storage/providers/localstorage.py b/pkg/storage/providers/localstorage.py index 84ce8a0b..d21f5427 100644 --- a/pkg/storage/providers/localstorage.py +++ b/pkg/storage/providers/localstorage.py @@ -2,6 +2,7 @@ from __future__ import annotations import os import aiofiles +import shutil from ...core import app @@ -22,6 +23,8 @@ class LocalStorageProvider(provider.StorageProvider): key: str, value: bytes, ): + if not os.path.exists(os.path.join(LOCAL_STORAGE_PATH, os.path.dirname(key))): + os.makedirs(os.path.join(LOCAL_STORAGE_PATH, os.path.dirname(key))) async with aiofiles.open(os.path.join(LOCAL_STORAGE_PATH, f'{key}'), 'wb') as f: await f.write(value) @@ -43,3 +46,11 @@ class LocalStorageProvider(provider.StorageProvider): key: str, ): os.remove(os.path.join(LOCAL_STORAGE_PATH, f'{key}')) + + async def delete_dir_recursive( + self, + dir_path: str, + ): + # 直接删除整个目录 + if os.path.exists(os.path.join(LOCAL_STORAGE_PATH, dir_path)): + shutil.rmtree(os.path.join(LOCAL_STORAGE_PATH, dir_path))