修复文件上传和下单支付流程
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user