/
s3.go
60 lines (50 loc) · 1.59 KB
/
s3.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package storage
import (
"github.com/avanibbles/flowflow/pkg/config"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
session2 "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"go.uber.org/zap"
)
type s3StorageService struct {
S3 *s3.S3
BucketName string
Logger *zap.Logger
Uploader *s3manager.Uploader
}
func newS3StorageService(cfg *config.S3StorageConfig, logger *zap.Logger) (*s3StorageService, error) {
awsConfig := &aws.Config{
Credentials: credentials.NewEnvCredentials(),
Endpoint: cfg.Endpoint,
Region: cfg.Region,
DisableSSL: cfg.DisableSSL,
S3ForcePathStyle: cfg.ForcePathStyle,
}
session, _ := session2.NewSession(awsConfig)
s3Client := s3.New(session)
uploader := s3manager.NewUploader(session)
return &s3StorageService{
S3: s3Client,
BucketName: cfg.BucketName,
Logger: logger.With(zap.String("component", "S3StorageService")),
Uploader: uploader,
}, nil
}
func (s *s3StorageService) Put(req PutRequest) (*PutResponse, error) {
input := s3manager.UploadInput{Key: &req.Key, Body: req.Body, Bucket: &s.BucketName}
resp, err := s.Uploader.Upload(&input)
if err != nil {
return nil, err
}
return &PutResponse{Location: resp.Location}, nil
}
func (s *s3StorageService) Get(req GetRequest) (*GetResponse, error) {
input := s3.GetObjectInput{Bucket: &s.BucketName, Key: &req.Key}
resp, err := s.S3.GetObject(&input)
if err != nil {
return nil, err
}
return &GetResponse{Body: resp.Body}, nil
}