对象存储抽象
Object Storage Abstraction
统一文件存储接口,支持本地和云存储后端无缝切换
子问题
1.存储后端抽象
2.流式读写
3.路径管理
4.多租户隔离
5.S3 错误码到标准异常的语义映射
6.S3 对象标签与成本归因
7.便捷工具层桥接(无需手动获取 service 实例)
各项目的解法1 solutions
Signals
横向对比
| 维度 | Langflow |
|---|---|
| 接口设计 | ABC 基类 7 个 @abstractmethod,全异步签名 |
| 后端实现 | Local(anyio.Path + aiofile)+ S3(aioboto3)双后端 |
| 切换机制 | StorageServiceFactory 读取 settings.storage_type 字符串分发 |
| 命名空间 | flow_id 参数贯穿所有方法,S3 用前缀、本地用子目录 |
| 流式支持 | get_file_stream 返回 AsyncIterator[bytes],S3 用 iter_chunks |
| 错误处理 | S3 错误码映射为 Python 标准异常(FileNotFoundError/PermissionError) |
| 标签与元数据 | S3 支持 object_storage_tags 配置注入 Tagging |
| 依赖管理 | aioboto3 懒加载 import,本地模式无需安装 S3 SDK |
最佳实践
1.抽象StorageService接口,通过配置切换本地/S3后端
2.S3 SDK 懒加载 import,本地模式零额外依赖
3.未知 storage_type 不抛异常而 fallback 到 local,保证可用性
4.AWS 错误码映射为 FileNotFoundError/PermissionError 等标准异常