| 861 | |
| 862 | class OpenDALFileStorage(FileStorageInterface): |
| 863 | def __init__(self): |
| 864 | try: |
| 865 | import opendal |
| 866 | except ImportError: |
| 867 | raise ImportError('请先安装 `opendal`, 例如: "pip install opendal"') |
| 868 | self.service = settings.opendal_scheme |
| 869 | service_settings = {} |
| 870 | for key, value in settings.items(): |
| 871 | if key.startswith("opendal_" + self.service): |
| 872 | setting_name = key.split("_", 2)[2] |
| 873 | service_settings[setting_name] = value |
| 874 | self.operator = opendal.AsyncOperator( |
| 875 | settings.opendal_scheme, **service_settings |
| 876 | ) |
| 877 | |
| 878 | async def save_file(self, file: UploadFile, save_path: str): |
| 879 | # 使用 asyncio.to_thread 避免阻塞事件循环 |