diff options
| author | 2026-04-15 16:31:54 +0700 | |
|---|---|---|
| committer | 2026-04-15 16:31:54 +0700 | |
| commit | ab557dd4df732c5d461bf7015f9eb0e761c982b7 (patch) | |
| tree | 5f34d9ffae459c559f7246fbd514a08a88e97d6d /internal/blog/s3.go | |
| parent | 66b2a96fcca113105043be3cb9c49f8ee7fe240c (diff) | |
| download | web-ab557dd4df732c5d461bf7015f9eb0e761c982b7.tar.gz web-ab557dd4df732c5d461bf7015f9eb0e761c982b7.zip | |
feat: add usepathstyle flag for s3 config
refactor: use aws-sdk-go-v2/config package for configuring s3 client
Diffstat (limited to 'internal/blog/s3.go')
| -rw-r--r-- | internal/blog/s3.go | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/internal/blog/s3.go b/internal/blog/s3.go index de4eb3a..86a6463 100644 --- a/internal/blog/s3.go +++ b/internal/blog/s3.go @@ -11,6 +11,7 @@ import ( "github.com/SayaAndy/saya-today-web/config" "github.com/SayaAndy/saya-today-web/internal/frontmatter" "github.com/aws/aws-sdk-go-v2/aws" + awsconfig "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/service/s3" ) @@ -27,12 +28,32 @@ func NewS3Client(cfg *config.StorageConfig) (Client, error) { } s3cfg := cfg.Config.(*config.S3Config) - s3cl := s3.New(s3.Options{ - Region: s3cfg.Region, - BaseEndpoint: aws.String(s3cfg.Endpoint), - Credentials: credentials.NewStaticCredentialsProvider(s3cfg.AccessKeyID, s3cfg.SecretAccessKey, ""), + opts := []func(*awsconfig.LoadOptions) error{ + awsconfig.WithRegion(s3cfg.Region), + } + if s3cfg.AccessKeyID != "" && s3cfg.SecretAccessKey != "" { + opts = append(opts, awsconfig.WithCredentialsProvider( + credentials.NewStaticCredentialsProvider(s3cfg.AccessKeyID, s3cfg.SecretAccessKey, ""), + )) + } + + awsCfg, err := awsconfig.LoadDefaultConfig(context.Background(), opts...) + if err != nil { + return nil, fmt.Errorf("load AWS config: %w", err) + } + + var s3Opts []func(*s3.Options) + if s3cfg.Endpoint != "" { + s3Opts = append(s3Opts, func(o *s3.Options) { + o.BaseEndpoint = aws.String(s3cfg.Endpoint) + }) + } + s3Opts = append(s3Opts, func(o *s3.Options) { + o.UsePathStyle = s3cfg.UsePathStyle }) + s3cl := s3.NewFromConfig(awsCfg, s3Opts...) + return &S3Client{s3cfg.Prefix, s3cfg.BucketName, s3cl}, nil } |