* 新增 tools 包:统一工具定义、注册表与 Server 接口,对齐 MCP 规范 * 新增 websocket 包:泛化连接管理、心跳、并发写锁与优雅关闭 * 新增参数读取工具函数,避免类型断言静默失败 * 新增 OSS 路径识别与 JSON 扁平映射还原工具 * 修复租户 SQL 条件插入位置,正确处理 GROUP BY 与 ORDER BY 同时出现的场景
42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"regexp"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
)
|
|
|
|
// ossObjectPathPattern 匹配 MinIO 上传生成的对象路径(不带 http 前缀的相对路径):
|
|
// /YYYY-MM-DD/32位uuid.扩展名,如 /2026-08-19/1e9d9e48-3f6b-4a2c-8d5e-1f2a3b4c.png
|
|
var ossObjectPathPattern = regexp.MustCompile(`^/\d{4}-\d{2}-\d{2}/[0-9a-fA-F-]{32}\.[a-zA-Z0-9]{1,10}$`)
|
|
|
|
// IsOSSPath 判断字符串是否为 MinIO 对象路径(无 http(s) 前缀)。
|
|
// 模型网关把结果转存 OSS 后返回该裸路径,消费方据此识别"已是文件路径"而不再重复上传。
|
|
// 对象命名规则见 oss/minio 的 ensureBucketAndObjectName,格式变化只需改这一处。
|
|
func IsOSSPath(s string) bool {
|
|
return ossObjectPathPattern.MatchString(s)
|
|
}
|
|
|
|
// GetFileAddressPrefix 拼接图片前缀地址
|
|
func GetFileAddressPrefix(ctx context.Context) (imageUrl string, err error) {
|
|
// 拼接图片前缀地址
|
|
bucketName, err := GetBucketName(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
imageUrl = fmt.Sprintf("%s/%s", g.Cfg().MustGet(ctx, "filePrefix").String(), bucketName)
|
|
return
|
|
}
|
|
|
|
// GetBucketName 获取bucket名称
|
|
func GetBucketName(ctx context.Context) (bucketName string, err error) {
|
|
user, err := GetUserInfo(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
bucketName = fmt.Sprintf("tenantid-%d", user.TenantId)
|
|
return
|
|
}
|