# 配置管理功能实现说明 ## 功能概述 本次更新为WebSocket API添加了配置管理功能,允许前端动态修改CAD文件的基础路径和文件扩展名配置,所有修改都会持久化到配置文件中。 ## 新增功能 ### 1. 获取文件配置 (get_file_config) 获取当前的文件基础路径和扩展名配置。 **WebSocket消息**: ```json { "type": "get_file_config" } ``` **响应**: ```json { "type": "info", "message": "获取文件配置成功", "data": { "base_path": "C:\\Users\\Public\\Documents", "file_extensions": { "creo": [".prt", ".asm", ".drw"], "pdms": [".rvm", ".dri"], "revit": [".rvt", ".rfa", ".rte"] } } } ``` ### 2. 设置基础路径 (set_base_path) 修改CAD文件的基础存储路径并持久化。 **WebSocket消息**: ```json { "type": "set_base_path", "base_path": "D:\\CAD_Files" } ``` **验证规则**: - 路径必须存在 - 路径必须是有效的目录 - 修改会立即写入配置文件 ### 3. 设置文件扩展名 (set_file_extensions) 修改支持的文件扩展名配置并持久化。 **WebSocket消息**: ```json { "type": "set_file_extensions", "file_extensions": { "creo": [".prt", ".asm", ".drw", ".sec"], "pdms": [".rvm", ".dri"], "revit": [".rvt", ".rfa", ".rte"], "autocad": [".dwg", ".dxf"] } } ``` **验证规则**: - 扩展名配置必须是字典格式 - 每个软件的扩展名必须是数组 - 所有扩展名必须以"."开头 - 修改会立即写入配置文件 ## 代码修改说明 ### 1. 配置文件修改 (`configs/software_config.yaml`) 添加了`file_extensions`配置项: ```yaml file_storage: cad_files_path: "C:\\Users\\Public\\Documents" # 文件扩展名配置 file_extensions: creo: [".prt", ".asm", ".drw"] pdms: [".rvm", ".dri"] revit: [".rvt", ".rfa", ".rte"] ``` ### 2. 配置类扩展 (`app/config.py`) 在`SoftwareConfig`类中新增方法: - `get_file_extensions()`: 获取文件扩展名配置 - `set_file_extensions(extensions)`: 设置文件扩展名并持久化 - `set_cad_files_path(path)`: 设置CAD文件路径并持久化 - `save_config()`: 保存配置到YAML文件 ### 3. 文件管理模块修改 (`app/api/v1/files.py`) - 将硬编码的`CAD_EXTENSIONS`改为动态获取:`get_cad_extensions()` - 更新`is_cad_file()`函数,从配置动态读取扩展名 - 更新`get_file_extension()`函数,从配置动态读取扩展名 ### 4. WebSocket API扩展 (`app/api/v1/websocket.py`) 在`WSMessageType`类中新增消息类型: - `GET_FILE_CONFIG = "get_file_config"` - `SET_BASE_PATH = "set_base_path"` - `SET_FILE_EXTENSIONS = "set_file_extensions"` 在`handle_client_message()`函数中新增对应的消息处理逻辑。 ### 5. API文档更新 (`websocket-file-api-docs.md`) 添加了完整的配置管理功能文档,包括: - 接口说明 - 请求/响应示例 - JavaScript和React使用示例 - 注意事项 ## 使用示例 ### JavaScript示例 ```javascript const ws = new WebSocket('ws://localhost:8000/api/v1/ws/connect?user_id=user123'); ws.onopen = () => { // 获取当前配置 ws.send(JSON.stringify({ type: 'get_file_config' })); }; ws.onmessage = (event) => { const message = JSON.parse(event.data); console.log(message); }; // 修改基础路径 setTimeout(() => { ws.send(JSON.stringify({ type: 'set_base_path', base_path: 'D:\\CAD_Files' })); }, 1000); // 修改文件扩展名 setTimeout(() => { ws.send(JSON.stringify({ type: 'set_file_extensions', file_extensions: { creo: ['.prt', '.asm', '.drw'], pdms: ['.rvm', '.dri'], revit: ['.rvt', '.rfa', '.rte'], autocad: ['.dwg', '.dxf'] } })); }, 2000); ``` ## 注意事项 1. **权限要求**: 修改配置需要对`configs/software_config.yaml`文件有写入权限 2. **配置立即生效**: 修改后立即生效,影响文件列表查询和下载功能 3. **路径验证**: 设置基础路径时会验证路径是否存在且为有效目录 4. **扩展名格式**: 所有扩展名必须以"."开头 5. **配置同步**: 修改配置后,建议调用`get_file_list`重新获取文件列表以查看变更效果 6. **并发修改**: 多个客户端同时修改配置时,以最后一次修改为准 ## 测试建议 1. 启动WebSocket服务器 2. 使用WebSocket客户端连接 3. 测试获取配置功能 4. 测试修改基础路径(使用有效和无效路径) 5. 测试修改文件扩展名(使用有效和无效格式) 6. 验证配置文件是否正确更新 7. 验证文件列表是否使用新配置 ## 错误处理 所有接口都包含完善的错误处理: - 参数验证 - 路径验证 - 扩展名格式验证 - 文件写入异常处理 错误会通过WebSocket以`type: "error"`消息返回给客户端。