Skip to content

Commit fb1a0a5

Browse files
committed
++
1 parent d7087f9 commit fb1a0a5

File tree

5 files changed

+143
-45
lines changed

5 files changed

+143
-45
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ jobs:
155155
name: Build and push Docker image
156156
runs-on: ubuntu-latest
157157
needs: build
158-
if: startsWith(github.ref, 'refs/tags/')
158+
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main')
159159

160160
steps:
161161
- name: Checkout code
@@ -180,7 +180,9 @@ jobs:
180180
type=semver,pattern={{version}}
181181
type=semver,pattern={{major}}.{{minor}}
182182
type=semver,pattern={{major}}
183-
type=raw,value=latest
183+
type=raw,value=latest,enable={{is_default_branch}}
184+
type=ref,event=branch
185+
type=raw,value=dev,enable={{is_default_branch}}
184186
labels: |
185187
org.opencontainers.image.title=FileCodeBox
186188
org.opencontainers.image.description=高性能文件分享服务 - Go语言实现

go.mod

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ go 1.24
55
toolchain go1.24.4
66

77
require (
8-
github.com/aws/aws-sdk-go v1.55.8
8+
github.com/aws/aws-sdk-go-v2 v1.30.3
9+
github.com/aws/aws-sdk-go-v2/config v1.27.27
10+
github.com/aws/aws-sdk-go-v2/credentials v1.17.27
11+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8
12+
github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3
913
github.com/gin-contrib/cors v1.7.6
1014
github.com/gin-gonic/gin v1.10.1
1115
github.com/golang-jwt/jwt/v4 v4.5.2
@@ -24,6 +28,20 @@ require (
2428

2529
require (
2630
github.com/KyleBanks/depth v1.2.1 // indirect
31+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 // indirect
32+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect
33+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect
34+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect
35+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
36+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 // indirect
37+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect
38+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 // indirect
39+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect
40+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect
41+
github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect
42+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect
43+
github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect
44+
github.com/aws/smithy-go v1.20.3 // indirect
2745
github.com/bytedance/sonic v1.14.0 // indirect
2846
github.com/bytedance/sonic/loader v0.3.0 // indirect
2947
github.com/cloudwego/base64x v0.1.6 // indirect
@@ -50,7 +68,6 @@ require (
5068
github.com/goccy/go-json v0.10.5 // indirect
5169
github.com/jinzhu/inflection v1.0.0 // indirect
5270
github.com/jinzhu/now v1.1.5 // indirect
53-
github.com/jmespath/go-jmespath v0.4.0 // indirect
5471
github.com/josharian/intern v1.0.0 // indirect
5572
github.com/json-iterator/go v1.1.12 // indirect
5673
github.com/klauspost/cpuid/v2 v2.3.0 // indirect

go.sum

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,43 @@
11
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
22
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
3-
github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ=
4-
github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk=
3+
github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY=
4+
github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc=
5+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg=
6+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM=
7+
github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90=
8+
github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg=
9+
github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI=
10+
github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4=
11+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw=
12+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU=
13+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8 h1:u1KOU1S15ufyZqmH/rA3POkiRH6EcDANHj2xHRzq+zc=
14+
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.8/go.mod h1:WPv2FRnkIOoDv/8j2gSUsI4qDc7392w5anFB/I89GZ8=
15+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU=
16+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8=
17+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI=
18+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM=
19+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
20+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
21+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 h1:Z5r7SycxmSllHYmaAZPpmN8GviDrSGhMS6bldqtXZPw=
22+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15/go.mod h1:CetW7bDE00QoGEmPUoZuRog07SGVAUVW6LFpNP0YfIg=
23+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8=
24+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI=
25+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 h1:YPYe6ZmvUfDDDELqEKtAd6bo8zxhkm+XEFEzQisqUIE=
26+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17/go.mod h1:oBtcnYua/CgzCWYN7NZ5j7PotFDaFSUjCYVTtfyn7vw=
27+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE=
28+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII=
29+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 h1:246A4lSTXWJw/rmlQI+TT2OcqeDMKBdyjEQrafMaQdA=
30+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15/go.mod h1:haVfg3761/WF7YPuJOER2MP0k4UAXyHaLclKXB6usDg=
31+
github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 h1:hT8ZAZRIfqBqHbzKTII+CIiY8G2oC9OpLedkZ51DWl8=
32+
github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3/go.mod h1:Lcxzg5rojyVPU/0eFwLtcyTaek/6Mtic5B1gJo7e/zE=
33+
github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM=
34+
github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU=
35+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE=
36+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw=
37+
github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE=
38+
github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ=
39+
github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE=
40+
github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
541
github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ=
642
github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA=
743
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
@@ -72,10 +108,6 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
72108
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
73109
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
74110
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
75-
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
76-
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
77-
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
78-
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
79111
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
80112
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
81113
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -183,9 +215,6 @@ google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXn
183215
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
184216
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
185217
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
186-
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
187-
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
188-
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
189218
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
190219
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
191220
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

internal/storage/s3_strategy.go

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,25 @@ package storage
22

33
import (
44
"bytes"
5+
"context"
56
"fmt"
67
"io"
78
"log"
89
"mime/multipart"
910
"net/http"
1011
"strings"
12+
"time"
1113

12-
"github.com/aws/aws-sdk-go/aws"
13-
"github.com/aws/aws-sdk-go/aws/credentials"
14-
"github.com/aws/aws-sdk-go/aws/session"
15-
"github.com/aws/aws-sdk-go/service/s3"
14+
"github.com/aws/aws-sdk-go-v2/aws"
15+
"github.com/aws/aws-sdk-go-v2/config"
16+
"github.com/aws/aws-sdk-go-v2/credentials"
17+
"github.com/aws/aws-sdk-go-v2/service/s3"
1618
"github.com/gin-gonic/gin"
1719
)
1820

1921
// S3StorageStrategy S3 存储策略实现
2022
type S3StorageStrategy struct {
21-
client *s3.S3
23+
client *s3.Client
2224
bucketName string
2325
basePath string
2426
hostname string
@@ -31,31 +33,41 @@ func NewS3StorageStrategy(accessKeyID, secretAccessKey, bucketName, endpointURL,
3133
return nil, fmt.Errorf("S3 bucket name cannot be empty")
3234
}
3335

34-
// 创建AWS会话配置
35-
awsConfig := &aws.Config{
36-
Region: aws.String(regionName),
37-
}
36+
ctx := context.Background()
3837

39-
// 如果有自定义endpoint
40-
if endpointURL != "" {
41-
awsConfig.Endpoint = aws.String(endpointURL)
42-
awsConfig.S3ForcePathStyle = aws.Bool(true) // 对于自定义endpoint,通常需要path style
38+
// 创建配置选项
39+
var optFns []func(*config.LoadOptions) error
40+
41+
// 设置区域
42+
if regionName != "" {
43+
optFns = append(optFns, config.WithRegion(regionName))
4344
}
4445

4546
// 设置凭证
4647
if accessKeyID != "" && secretAccessKey != "" {
47-
creds := credentials.NewStaticCredentials(accessKeyID, secretAccessKey, sessionToken)
48-
awsConfig.Credentials = creds
48+
creds := credentials.NewStaticCredentialsProvider(accessKeyID, secretAccessKey, sessionToken)
49+
optFns = append(optFns, config.WithCredentialsProvider(creds))
4950
}
5051

51-
// 创建会话
52-
sess, err := session.NewSession(awsConfig)
52+
// 加载配置
53+
cfg, err := config.LoadDefaultConfig(ctx, optFns...)
5354
if err != nil {
54-
return nil, fmt.Errorf("failed to create AWS session: %w", err)
55+
return nil, fmt.Errorf("failed to load AWS config: %w", err)
56+
}
57+
58+
// 创建S3客户端选项
59+
var s3OptFns []func(*s3.Options)
60+
61+
// 如果有自定义endpoint
62+
if endpointURL != "" {
63+
s3OptFns = append(s3OptFns, func(o *s3.Options) {
64+
o.BaseEndpoint = aws.String(endpointURL)
65+
o.UsePathStyle = true // 对于自定义endpoint,通常需要path style
66+
})
5567
}
5668

5769
// 创建S3客户端
58-
client := s3.New(sess)
70+
client := s3.NewFromConfig(cfg, s3OptFns...)
5971

6072
strategy := &S3StorageStrategy{
6173
client: client,
@@ -82,7 +94,7 @@ func (ss *S3StorageStrategy) buildKey(relativePath string) string {
8294
func (ss *S3StorageStrategy) WriteFile(path string, data []byte) error {
8395
key := ss.buildKey(path)
8496

85-
_, err := ss.client.PutObject(&s3.PutObjectInput{
97+
_, err := ss.client.PutObject(context.Background(), &s3.PutObjectInput{
8698
Bucket: aws.String(ss.bucketName),
8799
Key: aws.String(key),
88100
Body: bytes.NewReader(data),
@@ -95,7 +107,7 @@ func (ss *S3StorageStrategy) WriteFile(path string, data []byte) error {
95107
func (ss *S3StorageStrategy) ReadFile(path string) ([]byte, error) {
96108
key := ss.buildKey(path)
97109

98-
result, err := ss.client.GetObject(&s3.GetObjectInput{
110+
result, err := ss.client.GetObject(context.Background(), &s3.GetObjectInput{
99111
Bucket: aws.String(ss.bucketName),
100112
Key: aws.String(key),
101113
})
@@ -121,7 +133,7 @@ func (ss *S3StorageStrategy) DeleteFile(path string) error {
121133
}
122134

123135
// 删除单个文件
124-
_, err := ss.client.DeleteObject(&s3.DeleteObjectInput{
136+
_, err := ss.client.DeleteObject(context.Background(), &s3.DeleteObjectInput{
125137
Bucket: aws.String(ss.bucketName),
126138
Key: aws.String(key),
127139
})
@@ -137,7 +149,7 @@ func (ss *S3StorageStrategy) deleteWithPrefix(prefix string) error {
137149
}
138150

139151
// 列出所有匹配的对象
140-
result, err := ss.client.ListObjectsV2(&s3.ListObjectsV2Input{
152+
result, err := ss.client.ListObjectsV2(context.Background(), &s3.ListObjectsV2Input{
141153
Bucket: aws.String(ss.bucketName),
142154
Prefix: aws.String(prefix),
143155
})
@@ -147,7 +159,7 @@ func (ss *S3StorageStrategy) deleteWithPrefix(prefix string) error {
147159

148160
// 删除所有匹配的对象
149161
for _, obj := range result.Contents {
150-
_, err := ss.client.DeleteObject(&s3.DeleteObjectInput{
162+
_, err := ss.client.DeleteObject(context.Background(), &s3.DeleteObjectInput{
151163
Bucket: aws.String(ss.bucketName),
152164
Key: obj.Key,
153165
})
@@ -163,7 +175,7 @@ func (ss *S3StorageStrategy) deleteWithPrefix(prefix string) error {
163175
func (ss *S3StorageStrategy) FileExists(path string) bool {
164176
key := ss.buildKey(path)
165177

166-
_, err := ss.client.HeadObject(&s3.HeadObjectInput{
178+
_, err := ss.client.HeadObject(context.Background(), &s3.HeadObjectInput{
167179
Bucket: aws.String(ss.bucketName),
168180
Key: aws.String(key),
169181
})
@@ -213,24 +225,28 @@ func (ss *S3StorageStrategy) GenerateFileURL(filePath string, fileName string) (
213225
return "/share/download", nil
214226
}
215227

216-
// 生成预签名URL
217-
req, _ := ss.client.GetObjectRequest(&s3.GetObjectInput{
228+
// 使用AWS SDK v2的预签名客户端
229+
presignClient := s3.NewPresignClient(ss.client)
230+
231+
// 生成预签名URL(1小时有效期)
232+
presignResult, err := presignClient.PresignGetObject(context.Background(), &s3.GetObjectInput{
218233
Bucket: aws.String(ss.bucketName),
219234
Key: aws.String(key),
235+
}, func(opts *s3.PresignOptions) {
236+
opts.Expires = time.Duration(3600) * time.Second
220237
})
221238

222-
url, err := req.Presign(3600) // 1小时有效期
223239
if err != nil {
224240
return "", fmt.Errorf("生成预签名URL失败: %v", err)
225241
}
226242

227-
return url, nil
243+
return presignResult.URL, nil
228244
}
229245

230246
// TestConnection 测试 S3 连接
231247
func (ss *S3StorageStrategy) TestConnection() error {
232248
// 测试是否可以列出 bucket
233-
_, err := ss.client.HeadBucket(&s3.HeadBucketInput{
249+
_, err := ss.client.HeadBucket(context.Background(), &s3.HeadBucketInput{
234250
Bucket: aws.String(ss.bucketName),
235251
})
236252
if err != nil {
@@ -241,7 +257,7 @@ func (ss *S3StorageStrategy) TestConnection() error {
241257
testKey := ss.buildKey(".test_connection")
242258

243259
// 尝试写入测试文件
244-
_, err = ss.client.PutObject(&s3.PutObjectInput{
260+
_, err = ss.client.PutObject(context.Background(), &s3.PutObjectInput{
245261
Bucket: aws.String(ss.bucketName),
246262
Key: aws.String(testKey),
247263
Body: bytes.NewReader([]byte("test")),
@@ -251,7 +267,7 @@ func (ss *S3StorageStrategy) TestConnection() error {
251267
}
252268

253269
// 清理测试文件
254-
_, err = ss.client.DeleteObject(&s3.DeleteObjectInput{
270+
_, err = ss.client.DeleteObject(context.Background(), &s3.DeleteObjectInput{
255271
Bucket: aws.String(ss.bucketName),
256272
Key: aws.String(testKey),
257273
})

test_s3_upgrade.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/zy84338719/filecodebox/internal/storage"
8+
)
9+
10+
func main() {
11+
fmt.Println("测试 AWS SDK v2 升级...")
12+
13+
// 尝试创建 S3 存储策略(使用虚拟参数)
14+
s3Strategy, err := storage.NewS3StorageStrategy(
15+
"test-access-key",
16+
"test-secret-key",
17+
"test-bucket",
18+
"https://s3.amazonaws.com",
19+
"us-east-1",
20+
"",
21+
"",
22+
false,
23+
"",
24+
)
25+
26+
if err != nil {
27+
log.Printf("创建 S3 策略时出错(这是预期的,因为使用的是测试凭证): %v", err)
28+
} else {
29+
fmt.Println("S3 策略创建成功!")
30+
fmt.Printf("S3 策略类型: %T\n", s3Strategy)
31+
}
32+
33+
fmt.Println("AWS SDK v2 升级验证完成!")
34+
}

0 commit comments

Comments
 (0)