修复文件上传和下单支付流程

This commit is contained in:
yml2213
2026-06-12 19:42:24 +08:00
parent 6ada7393ef
commit a615100730
7 changed files with 61 additions and 11 deletions
+24 -4
View File
@@ -10,6 +10,7 @@ import (
"net/url"
"path"
"strings"
"sync"
"time"
"hfb_sys/backend/internal/config"
@@ -19,8 +20,10 @@ import (
)
type Storage struct {
client *minio.Client
bucket string
client *minio.Client
bucket string
bucketMu sync.Mutex
bucketReady bool
}
type Object struct {
@@ -43,7 +46,7 @@ func NewStorage(cfg config.StorageConfig) (*Storage, error) {
}
storage := &Storage{client: client, bucket: cfg.Bucket}
if err := storage.ensureBucket(context.Background()); err != nil {
return nil, err
return storage, err
}
return storage, nil
}
@@ -62,6 +65,9 @@ func (s *Storage) Put(ctx context.Context, scene string, header *multipart.FileH
}
func (s *Storage) PutObject(ctx context.Context, key string, reader io.Reader, size int64, contentType string, metadata map[string]string) error {
if err := s.ensureBucketReady(ctx); err != nil {
return err
}
_, err := s.client.PutObject(ctx, s.bucket, key, reader, size, minio.PutObjectOptions{
ContentType: contentType,
UserMetadata: metadata,
@@ -95,9 +101,23 @@ func (s *Storage) ensureBucket(ctx context.Context) error {
}
}
if exists {
s.bucketReady = true
return nil
}
return s.client.MakeBucket(ctx, s.bucket, minio.MakeBucketOptions{})
if err := s.client.MakeBucket(ctx, s.bucket, minio.MakeBucketOptions{}); err != nil {
return err
}
s.bucketReady = true
return nil
}
func (s *Storage) ensureBucketReady(ctx context.Context) error {
s.bucketMu.Lock()
defer s.bucketMu.Unlock()
if s.bucketReady {
return nil
}
return s.ensureBucket(ctx)
}
func normalizeEndpoint(raw string) (string, bool, error) {
+1 -1
View File
@@ -242,7 +242,7 @@ func New(cfg config.Config, deps Dependencies, logger *zap.Logger) *gin.Engine {
var err error
fileStorage, err = filemodule.NewStorage(cfg.Storage)
if err != nil {
logger.Warn("file storage unavailable; file APIs will return 503", zap.Error(err))
logger.Warn("file storage bucket is not ready; file APIs will retry on request", zap.Error(err))
}
}
fileService := filemodule.NewService(fileStorage)