Files
VptPassiveAdapter/api/viid_upload.go
Jerry Yan 86f0182593 fix(s3): 解决缓存清理时的类型断言错误
- 添加类型检查避免非 cacheItem 类型值导致的 panic
- 跳过 lock_xxx 对应的 *sync.Mutex 类型值
- 保持原有缓存过期清理逻辑不变
2025-12-29 10:49:42 +08:00

72 lines
2.0 KiB
Go

package api
import (
"ZhenTuLocalPassiveAdapter/logger"
"context"
"fmt"
"go.uber.org/zap"
"golang.org/x/sync/errgroup"
)
// UploadFaceData implements the coordinated upload flow: Get Config -> Upload -> Notify
func UploadFaceData(ctx context.Context, scenicId int64, deviceNo string, faceImg, thumbImg, srcImg []byte, facePos FacePositionInfo) error {
// 1. Get Upload Config
uploadConfig, err := GetUploadConfig(ctx, scenicId, deviceNo)
if err != nil {
logger.Error("获取上传配置失败", zap.String("deviceNo", deviceNo), zap.Error(err))
return err
}
logger.Info("获取到VIID任务ID", zap.Int64("taskId", uploadConfig.TaskID))
// 2. Parallel Upload to OSS
g, subCtx := errgroup.WithContext(ctx)
// Upload Face Image
g.Go(func() error {
if len(faceImg) > 0 {
if err := UploadFileToOSS(subCtx, uploadConfig.FaceUploadURL, faceImg, "image/jpeg"); err != nil {
return fmt.Errorf("upload face image failed: %w", err)
}
}
return nil
})
// Upload Thumbnail Image
g.Go(func() error {
if len(thumbImg) > 0 {
if err := UploadFileToOSS(subCtx, uploadConfig.ThumbnailUploadURL, thumbImg, "image/jpeg"); err != nil {
return fmt.Errorf("upload thumbnail image failed: %w", err)
}
}
return nil
})
// Upload Source Image
g.Go(func() error {
if len(srcImg) > 0 {
if err := UploadFileToOSS(subCtx, uploadConfig.SourceUploadURL, srcImg, "image/jpeg"); err != nil {
return fmt.Errorf("upload source image failed: %w", err)
}
}
return nil
})
if err := g.Wait(); err != nil {
// Report failure
SubmitFailure(ctx, uploadConfig.TaskID, "UPLOAD_FAILED", err.Error())
logger.Error("文件上传失败", zap.Int64("taskId", uploadConfig.TaskID), zap.Error(err))
return err
}
// 3. Submit Result
if err := SubmitResult(ctx, uploadConfig.TaskID, facePos); err != nil {
logger.Error("提交结果失败", zap.Int64("taskId", uploadConfig.TaskID), zap.Error(err))
return err
}
logger.Info("VIID任务完成", zap.Int64("taskId", uploadConfig.TaskID))
return nil
}