4.7 KiB
4.7 KiB
配置管理功能实现说明
功能概述
本次更新为WebSocket API添加了配置管理功能,允许前端动态修改CAD文件的基础路径和文件扩展名配置,所有修改都会持久化到配置文件中。
新增功能
1. 获取文件配置 (get_file_config)
获取当前的文件基础路径和扩展名配置。
WebSocket消息:
{
"type": "get_file_config"
}
响应:
{
"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消息:
{
"type": "set_base_path",
"base_path": "D:\\CAD_Files"
}
验证规则:
- 路径必须存在
- 路径必须是有效的目录
- 修改会立即写入配置文件
3. 设置文件扩展名 (set_file_extensions)
修改支持的文件扩展名配置并持久化。
WebSocket消息:
{
"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配置项:
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示例
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);
注意事项
-
权限要求: 修改配置需要对
configs/software_config.yaml文件有写入权限 -
配置立即生效: 修改后立即生效,影响文件列表查询和下载功能
-
路径验证: 设置基础路径时会验证路径是否存在且为有效目录
-
扩展名格式: 所有扩展名必须以"."开头
-
配置同步: 修改配置后,建议调用
get_file_list重新获取文件列表以查看变更效果 -
并发修改: 多个客户端同时修改配置时,以最后一次修改为准
测试建议
- 启动WebSocket服务器
- 使用WebSocket客户端连接
- 测试获取配置功能
- 测试修改基础路径(使用有效和无效路径)
- 测试修改文件扩展名(使用有效和无效格式)
- 验证配置文件是否正确更新
- 验证文件列表是否使用新配置
错误处理
所有接口都包含完善的错误处理:
- 参数验证
- 路径验证
- 扩展名格式验证
- 文件写入异常处理
错误会通过WebSocket以type: "error"消息返回给客户端。