"""
文件上传工具模块
提供MCP工具接口用于文件上传。
"""
import os
from typing import Dict, Any
from .rustfs_client import RustFSClient
def create_upload_tool() -> callable:
"""创建文件上传工具函数"""
client = RustFSClient()
def upload_file(file_path: str) -> Dict[str, Any]:
"""
上传文件到RustFS存储服务(使用boto3 SDK)
Args:
file_path: 本地文件的绝对路径
Returns:
包含上传结果的字典,包括:
- success: 上传是否成功
- filename: 文件名
- original_filename: 原始文件名
- size: 文件大小(字节)
- content_type: 文件MIME类型
- access_url: 文件访问URL
- file_id: 文件ID
- bucket: 存储桶名称
- upload_method: 上传方法
- message: 操作消息
Raises:
FileNotFoundError: 文件不存在
ValueError: 参数无效或路径不是文件
RuntimeError: 上传失败
"""
try:
# 验证输入参数
if not file_path or not isinstance(file_path, str):
raise ValueError("文件路径不能为空且必须是字符串")
# 标准化路径
file_path = os.path.abspath(file_path.strip())
# 上传文件(现在是同步方法)
result = client.upload_file(file_path)
return {
**result,
"message": f"文件 '{result['original_filename']}' 上传成功到 '{result['bucket']}' 存储桶"
}
except FileNotFoundError as e:
raise FileNotFoundError(str(e))
except ValueError as e:
raise ValueError(str(e))
except Exception as e:
raise RuntimeError(f"文件上传失败: {str(e)}")
return upload_file