diff --git a/go.mod b/go.mod index 3b02905..7a339d5 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.23 require ( github.com/aws/aws-sdk-go-v2 v1.41.1 github.com/aws/aws-sdk-go-v2/config v1.32.7 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.0 + github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.2 github.com/aws/aws-sdk-go-v2/service/s3 v1.96.0 ) diff --git a/go.sum b/go.sum index 6bbd50b..8a9509b 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ github.com/aws/aws-sdk-go-v2/credentials v1.19.7 h1:tHK47VqqtJxOymRrNtUXN5SP/zUT github.com/aws/aws-sdk-go-v2/credentials v1.19.7/go.mod h1:qOZk8sPDrxhf+4Wf4oT2urYJrYt3RejHSzgAquYeppw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17 h1:I0GyV8wiYrP8XpA70g1HBcQO1JlQxCMTW9npl5UbDHY= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17/go.mod h1:tyw7BOl5bBe/oqvoIeECFJjMdzXoa/dfVz3QQ5lgHGA= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.0 h1:MpkX8EjkwuvyuX9B7+Zgk5M4URb2WQ84Y6jM81n5imw= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.0/go.mod h1:4V9Pv5sFfMPWQF0Q0zYN6BlV/504dFGaTeogallRqQw= +github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.2 h1:1q8/WwEqZnM/vO4q1gx2g7lHYmyN+o4P7G6EW4zKbRQ= +github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.1.2/go.mod h1:owKRexW+Ir5ACD2UTesmjkQ+w7mcmknLNfwOiKfVLTg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 h1:xOLELNKGp2vsiteLsvLPwxC+mYmO6OZ8PYgiuPJzF8U= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17/go.mod h1:5M5CI3D12dNOtH3/mk6minaRwI2/37ifCURZISxA/IQ= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 h1:WWLqlh79iO48yLkj1v3ISRNiv+3KdQoZ6JWyfcsyQik= diff --git a/s3.go b/s3.go index eb57524..a194263 100644 --- a/s3.go +++ b/s3.go @@ -8,13 +8,13 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/feature/s3/manager" + "github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager" "github.com/aws/aws-sdk-go-v2/service/s3" ) -// Uploader is the interface for uploading objects to S3 using the upload manager +// Uploader is the interface for uploading objects to S3 using the transfer manager type Uploader interface { - Upload(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) + UploadObject(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) } // DirectUploader is the interface for uploading objects directly to S3 @@ -45,7 +45,7 @@ func (s *S3) Store(path string, content io.Reader, contentType string) (string, } func (s *S3) storeWithManager(path string, content io.Reader, contentType string) (string, error) { - out, err := s.svc.Upload(context.Background(), &s3.PutObjectInput{ + out, err := s.svc.UploadObject(context.Background(), &transfermanager.UploadObjectInput{ Bucket: aws.String(s.bucket), Key: aws.String(path), Body: content, @@ -100,8 +100,8 @@ func New(bucket string) (*S3, error) { return nil, err } client := s3.NewFromConfig(cfg) - uploader := manager.NewUploader(client, func(u *manager.Uploader) { - u.PartSize = 5 * 1024 * 1024 + uploader := transfermanager.New(client, func(o *transfermanager.Options) { + o.PartSizeBytes = 5 * 1024 * 1024 }) presignClient := s3.NewPresignClient(client) return &S3{ diff --git a/s3_test.go b/s3_test.go index 3337f78..2317b71 100644 --- a/s3_test.go +++ b/s3_test.go @@ -10,17 +10,17 @@ import ( "github.com/aws/aws-sdk-go-v2/aws" v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" - "github.com/aws/aws-sdk-go-v2/feature/s3/manager" + "github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager" "github.com/aws/aws-sdk-go-v2/service/s3" ) // Mock implementations for testing type mockUploader struct { - uploadFunc func(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) + uploadFunc func(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) } -func (m *mockUploader) Upload(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) { +func (m *mockUploader) UploadObject(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) { return m.uploadFunc(ctx, input, opts...) } @@ -81,7 +81,7 @@ func TestStore_WithUploadManager_Success(t *testing.T) { expectedURL := "https://s3.amazonaws.com/test-bucket/path/to/file.pdf?presigned=true" mockUploader := &mockUploader{ - uploadFunc: func(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) { + uploadFunc: func(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) { // Verify input parameters if *input.Bucket != testBucket { t.Errorf("Expected bucket %s, got %s", testBucket, *input.Bucket) @@ -99,7 +99,7 @@ func TestStore_WithUploadManager_Success(t *testing.T) { t.Errorf("Expected content %s, got %s", testContent, string(body)) } - return &manager.UploadOutput{ + return &transfermanager.UploadObjectOutput{ Key: aws.String(testPath), }, nil }, @@ -149,7 +149,7 @@ func TestStore_WithUploadManager_UploadError(t *testing.T) { expectedError := errors.New("upload failed") mockUploader := &mockUploader{ - uploadFunc: func(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) { + uploadFunc: func(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) { return nil, expectedError }, } @@ -191,8 +191,8 @@ func TestStore_WithUploadManager_PresignError(t *testing.T) { expectedError := errors.New("presign failed") mockUploader := &mockUploader{ - uploadFunc: func(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) { - return &manager.UploadOutput{ + uploadFunc: func(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) { + return &transfermanager.UploadObjectOutput{ Key: aws.String(testPath), }, nil }, @@ -390,8 +390,8 @@ func TestStore_PresignExpiry(t *testing.T) { var capturedExpiry time.Duration mockUploader := &mockUploader{ - uploadFunc: func(ctx context.Context, input *s3.PutObjectInput, opts ...func(*manager.Uploader)) (*manager.UploadOutput, error) { - return &manager.UploadOutput{Key: aws.String(testPath)}, nil + uploadFunc: func(ctx context.Context, input *transfermanager.UploadObjectInput, opts ...func(*transfermanager.Options)) (*transfermanager.UploadObjectOutput, error) { + return &transfermanager.UploadObjectOutput{Key: aws.String(testPath)}, nil }, }