- 新增 S3 兼容 Storage 抽象与 MinIO 实现,compose 启动 MinIO - 上传接口:校验 → 缩放 → WebP → 主图/缩略图入库 - 消息图片 content 改为对象 URL,拒绝 base64 - 工作台/访客端改为先上传再发消息
28 lines
598 B
Go
28 lines
598 B
Go
package storage
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"strings"
|
|
)
|
|
|
|
func randomHex(n int) string {
|
|
b := make([]byte, n)
|
|
_, _ = rand.Read(b)
|
|
return hex.EncodeToString(b)
|
|
}
|
|
|
|
// NormalizePublicBase 去掉末尾斜杠
|
|
func NormalizePublicBase(base string) string {
|
|
return strings.TrimRight(strings.TrimSpace(base), "/")
|
|
}
|
|
|
|
// IsAllowedObjectURL 判断 url 是否属于当前存储公网前缀
|
|
func IsAllowedObjectURL(publicBase, url string) bool {
|
|
base := NormalizePublicBase(publicBase)
|
|
if base == "" || url == "" {
|
|
return false
|
|
}
|
|
return strings.HasPrefix(url, base+"/") || url == base
|
|
}
|