feat: 完成连接测试和新建s3连接函数
This commit is contained in:
62
internal/s3/new.go
Normal file
62
internal/s3/new.go
Normal file
@ -0,0 +1,62 @@
|
||||
package s3
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
"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"
|
||||
smithyendpoints "github.com/aws/smithy-go/endpoints"
|
||||
"github.com/loveuer/nf/nft/log"
|
||||
"net/url"
|
||||
"nf-disk/internal/tool"
|
||||
)
|
||||
|
||||
type resolverV2 struct{}
|
||||
|
||||
func (*resolverV2) ResolveEndpoint(ctx context.Context, params s3.EndpointParameters) (
|
||||
smithyendpoints.Endpoint, error,
|
||||
) {
|
||||
u, err := url.Parse(*params.Endpoint)
|
||||
if err != nil {
|
||||
return smithyendpoints.Endpoint{}, err
|
||||
}
|
||||
return smithyendpoints.Endpoint{
|
||||
URI: *u,
|
||||
}, nil
|
||||
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
client *s3.Client
|
||||
}
|
||||
|
||||
func New(ctx context.Context, endpoint string, access string, key string) (*Client, error) {
|
||||
var (
|
||||
err error
|
||||
sdkConfig aws.Config
|
||||
output *s3.ListBucketsOutput
|
||||
)
|
||||
|
||||
if sdkConfig, err = config.LoadDefaultConfig(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s3Client := s3.NewFromConfig(sdkConfig, func(o *s3.Options) {
|
||||
o.BaseEndpoint = aws.String(endpoint)
|
||||
o.EndpointResolverV2 = &resolverV2{}
|
||||
o.Credentials = aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(access, key, ""))
|
||||
})
|
||||
|
||||
if output, err = s3Client.ListBuckets(tool.Timeout(5), &s3.ListBucketsInput{
|
||||
MaxBuckets: aws.Int32(2),
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, item := range output.Buckets {
|
||||
log.Debug("s3.New: list bucket name = %s", *item.Name)
|
||||
}
|
||||
|
||||
return &Client{client: s3Client}, nil
|
||||
}
|
15
internal/s3/new_test.go
Normal file
15
internal/s3/new_test.go
Normal file
@ -0,0 +1,15 @@
|
||||
package s3
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/loveuer/nf/nft/log"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNewClient(t *testing.T) {
|
||||
log.SetLogLevel(log.LogLevelDebug)
|
||||
_, err := New(context.TODO(), "http://10.220.10.15:9000/", "8ALV3DUZI31YG4BDRJ0Z", "CRqwS1MsiUj27TbRK+3T2n+LpKWd07VvaDKuzU0H")
|
||||
if err != nil {
|
||||
t.Fatalf("call s3.New err = %s", err.Error())
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user