fix version 1

This commit is contained in:
2026-09-22 21:15:34 +08:00
parent 9f86366638
commit d63d7e8b3a
277 changed files with 9959 additions and 1514 deletions

View File

@@ -6,7 +6,9 @@ import (
"io"
"log"
"mime/multipart"
"os"
"path/filepath"
"regexp"
"strings"
"bsm/full/module/base/fts/internal/config"
@@ -20,6 +22,9 @@ import (
"github.com/gin-gonic/gin"
)
// bucketPattern bucket名称只允许字母、数字、下划线和中划线
var bucketPattern = regexp.MustCompile(`^[A-Za-z0-9_-]{1,64}$`)
// Handler 上传文件
func Handler(c *gin.Context) {
var (
@@ -40,6 +45,11 @@ func Handler(c *gin.Context) {
infra.Response.Error(c, errcode.NewError(400, "参数错误"))
return
}
// 校验 bucket 名称,避免非法字符导致本地路径穿越或写入任意对象存储桶
if !bucketPattern.MatchString(bucket) {
infra.Response.Error(c, errcode.NewError(400, "bucket参数错误"))
return
}
// if !strings.Contains(provider, "local") {
// log.Println("provider参数错误")
// infra.Response.Error(c, errcode.NewError(400, "provider参数错误"))
@@ -99,6 +109,8 @@ func Handler(c *gin.Context) {
return
}
if err := impl.DBService.Create(&record).Error; err != nil {
// 落库失败时清理已写入的本地文件或对象存储对象,避免残留孤儿文件
removeStoredFile(&record, bucket)
infra.Response.Error(c, err)
return
}
@@ -106,6 +118,20 @@ func Handler(c *gin.Context) {
infra.Response.Success(c, record)
}
// removeStoredFile 清理已落盘/已上传的文件。单条 INSERT 无需事务,落库失败时按记录回滚外部存储
func removeStoredFile(record *models.FtsRecord, bucket string) {
if record.LocalPath != "" {
if err := os.Remove(record.LocalPath); err != nil {
log.Printf("清理本地文件失败: %v\n", err)
}
}
if record.OssPath != "" {
if err := RemoveOssObject(bucket, record.OssPath); err != nil {
log.Printf("清理对象存储文件失败: %v\n", err)
}
}
}
func chksum(fh *multipart.FileHeader) (string, error) {
// 2. 打开文件读取内容
file, err := fh.Open()