Files
kefu_cloud/server/internal/handler/message_validation.go
T
2026-07-15 10:49:52 +08:00

46 lines
1.2 KiB
Go

package handler
import (
"encoding/base64"
"errors"
"strings"
"unicode/utf8"
)
const (
maxTextMessageLength = 2000
maxImageMessageSize = 5 * 1024 * 1024
)
func validateMessageContent(messageType, content string) (string, error) {
switch messageType {
case "text":
content = strings.TrimSpace(content)
if content == "" {
return "", errors.New("消息内容不能为空")
}
if utf8.RuneCountInString(content) > maxTextMessageLength {
return "", errors.New("单条文本消息不能超过 2000 字")
}
return content, nil
case "image":
parts := strings.SplitN(content, ",", 2)
if len(parts) != 2 {
return "", errors.New("图片格式无效")
}
if parts[0] != "data:image/jpeg;base64" && parts[0] != "data:image/png;base64" && parts[0] != "data:image/gif;base64" {
return "", errors.New("仅支持 jpg、png、gif 图片")
}
bytes, err := base64.StdEncoding.DecodeString(parts[1])
if err != nil || len(bytes) == 0 {
return "", errors.New("图片内容无效")
}
if len(bytes) > maxImageMessageSize {
return "", errors.New("图片不能超过 5 MB")
}
return content, nil
default:
return "", errors.New("不支持的消息类型")
}
}